2011-10-24 16 views
0

私はPHPの初心者でもないし、MySQLの初心者でもない人も参加することができます...しかし、私がしなければならないことは、foreachを実行しなければPHPで奇妙な結合

SELECT `priorities`.`pri_name`, `agent_status`.`sta_title`, `specializations`.`spec_title`, `agents`.* 
FROM (`agents`) 
JOIN `priorities` ON `priorities`.`id` = `agents`.`priority` 
JOIN `agent_status` ON `agent_status`.`s_id` = `agents`.`user_status` 
JOIN `Specializations` ON `specializations`.`id` = `agents`.`Specialization` 
WHERE `agents`.`id` = '4'; 

は今、私は通常の状況下ではないと思われるこれに参加する1以上を追加する必要があります。私の現在の配列へデータ...

だから、私はそうのようなものです参加してい問題。しかし、私が把握する必要があるのは、この単一のクエリで、同じテーブルではなく別のレコードで結合を作成する方法です。

agents.f_name AS pf_name, agents.l_name AS pl_name 

だから、基本的に私はF_NAME、idは最初の選択したレコードのPIDと同じである第二のレコードのL_NAME ...ので、私の選択に追加するようなものです選択する必要があるだろう

は、何かのような...

JOIN('agents' ON agents.id = agents.p_id 

またはそのような何かを持っ...

+0

ビューの使用について熟考したことがありますか? –

答えて

2

これには別名を使用して自己結合を使用できます。たとえば、次のコードを考えてみてください。

SELECT 
    a.*, b.* 
FROM 
    table AS a 
    JOIN table as b 
WHERE 
    a.id = b.pid 

このコード例では、これを既存のクエリに適用できるはずです。

既存のクエリでは、agentsというプレフィックスを、テーブルに使用するエイリアスを持つエージェントテーブルのフィールドへの参照に変更する必要があります(agents)。 priorityはalias.priorityになるはずです。

+0

美しい..自己結合技術のおかげで、これは魅力のように機能します!私はあなたの答えを瞬時に選択します。 – Justin

1

あなたが(確かに必要なだけの時間を表の別名を使用し、同じテーブルに参加することができます最大許容結合数以下):

FROM agents a1 
JOIN agents a2 ON ([condition]) 
JOIN agents a3 ON ([condition]) 
0

キーは別の名前のagentsテーブルへの2番目の参照をエイリアスすることです。私の例では、別名としてa2を使用します。

SELECT ..., a2.f_name AS pf_name, a2.l_name AS pl_name 
... 
JOIN agents a2 
    ON agents.p_id = a2.id 
...