2011-10-24 78 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'; 

現在,我需要添加更多的加入到這個在正常情況下不會一個問題。但我需要弄清楚的是,在這個單一的查詢中,我可以在同一張表上創建一個連接,但創建一條不同的記錄。

所以基本上我需要選擇的是f_name,第二記錄,其中ID是一樣的最初所選記錄的PID l_name ......所以像添加到我的選擇:

agents.f_name AS pf_name, agents.l_name AS pl_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以使用您用於該表的別名代理表字段的引用,因此agentspriority應該成爲alias.priority。

+0

美麗..這工作就像一個魅力非常感謝自我加入技術!我會暫時選擇你的答案。 – Justin

1

您可以使用表的別名並加入同一個表儘可能多的時間,因爲你需要(當然,不超過允許的最大連接數):

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

關鍵是使用不同的名稱別名對agents表的第二個引用。在我的例子中,我將使用a2作爲別名。

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