2014-03-26 31 views
1

我正在嘗試與另一個表(用戶)加入表(任務)。我需要基於任務表中的值從用戶表中選擇不同的行:從單個JOIN中的同一個表中選擇不同的用戶

tasks(user1, user2, user3); 

users(id, name, email); 

使用LEFT以前我有聯繫的數據JOIN像這樣:

SELECT * FROM tasks LEFT JOIN users ON tasks.user1 = users.id; 

那是非常簡單的,所以我

SELECT * FROM tasks LEFT JOIN users ON tasks.user1 = users.id AND tasks.user2 = users.id; 

但返回用戶領域爲NULL,這是有道理的tasks.user1是不同的,以tasks.user2

:使用AND像這樣試過

我對現在如何做到這一點非常難過,所有的建議歡迎!

回答

2

你需要重複加入和別名users表diffeently每個聯接的列:

SELECT * FROM tasks 
LEFT JOIN users u1 ON tasks.user1 = u1.id 
LEFT JOIN users u2 ON tasks.user2 = u2.id 
... 
+0

很大,這將返回我需要的數據。我現在有一個問題,列標題覆蓋返回的數組中的數據(我正在使用PHP PDO),有沒有一種方法可以創建查詢以將每個用戶作爲一個數組返回給tasks.user *值? (如果需要的話,我可以把它放到一個新的SO問題中) –

+0

@MikeOram我會發佈一個新問題 - 我基於mysql/sql標籤來到這裏 - 聽起來你需要一個php pdo guru。您可以將列別稱爲SELECT tasks.col1,...,u1.id AS User1ID,u1.name作爲User1Name,.. u2.id作爲User2ID,u2.Name作爲User2Name ...'如果這有幫助嗎? – StuartLC

+0

好的,我確定我會發佈一個新問題,感謝您的幫助! –

1

使用這一個:

SELECT * 
FROM tasks 
LEFT JOIN users 
ON tasks.user1 = users.id 
OR tasks.user2 = users.id; 
+0

+1 - 只要連接的上下文(即它是否匹配的「user1」或「user2」)在查詢的其他地方不需要,這將起作用。 – StuartLC

+0

謝謝StuartLC! – Christos

+0

感謝您的建議,但根據@StuartLC評論我會用他的答案。 –

相關問題