2011-01-23 66 views
1

我試圖做一個查詢,選擇來自特定用戶和所有該用戶的朋友的所有消息。這個查詢幾乎可以工作,但第一部分會導致問題,因爲它最終會從'朋友'中選擇所有行。我想我需要使用某種JOIN才能根據需要進行工作,但我沒有足夠的JOINS經驗,在經過一個多小時的試驗後才能完成此工作。我該如何修復這個多表查詢來只選擇需要的行?

SELECT a.* 
    FROM messages a, friends b 
WHERE a.username = '$user' OR b.username = '$user' && b.friend = a.username 
ORDER BY a.id DESC 
LIMIT 5 

回答

-1
SELECT a.* 
    FROM messages a 
WHERE a.username = '$user' 
    OR a.username in (SELECT b.friend FROM friends b WHERE b.username = '$user') 
ORDER BY a.id DESC 
LIMIT 5 
0

也許像這樣的工作:

SELECT m.* 
    FROM messages m 
LEFT JOIN friends f 
     ON m.username = f.username 
    WHERE m.username = "$user" 
     OR f.friend = "$user" 
+0

不幸的是這是行不通的,因爲沒有保證在一個條目「朋友」,但他們仍然可以有留言。 – 2011-01-23 05:27:34

+0

我在我的答案中已經更改了一些查詢,這種方式更好嗎? – 2011-01-23 05:32:09

相關問題