2011-04-11 215 views
1

我想要根據CASE結果來加入表格。基本上,我想檢查我是否是發件人,如果不是,我想從用戶數據庫中檢索發件人的姓名。如果我是發件人,我想從users表中檢索收件人姓名。在一個LEFT JOIN語句中使用CASE結果(MySQL)

這裏是我當前的數據庫查詢,這個正確拉動信息,但users.username AS發出者會始終顯示發件人名稱:

SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE recipients END someid, 
       users.username AS sendername, 
       messages.body, 
       messages.time 
FROM messages 
LEFT JOIN users ON users.id = messages.senderid 
WHERE messages.recipients = $userid 
OR messages.senderid = $userid 
ORDER BY messages.time 

我想這一更改爲以下等價的: LEFT JOIN users ON users.id = someid其中someid在上述情況下定義。

謝謝!

回答

2
SELECT DISTINCT CASE WHEN $userid != senderid THEN senderid ELSE recipients END someid, 
       CASE WHEN $userid != senderid THEN senders.senderid ELSE receivers.recipients END somename 
       messages.body, 
       messages.time 
FROM messages 
LEFT JOIN users AS senders ON messages.senderid = senders.id 
LEFT JOIN users AS receivers ON messages.recipients = receivers.id 
WHERE messages.recipients = $userid 
OR messages.senderid = $userid 
ORDER BY messages.time 

您可能需要調整這個SQL得到你想要什麼,但它的要點是加入兩次,然後使用一個case語句來從相應的表拉你想要的項目。

+0

工作過的魅力!非常感謝Shawn。關於如何將多個收件人系統合併到此的任何想法建議?我編寫了撰寫系統,以便如果我將郵件寫入多個人,收件人字段最終看起來像「,13,2,23,53」,其中內部號碼是收件人的ID(封裝通過逗號)?如果不是沒有問題,我只是開始考慮這個問題 - 希望我能弄明白!非常感謝 - 這是我的主要障礙。 – Walker 2011-04-11 22:35:09