2011-08-11 138 views
1

我想寫一個查詢,選擇由朋友發佈的最新「板」條目,以及特定用戶。這意味着,如果我是查看本節的用戶,如果我發佈了某個內容,它會顯示最新的6個板子項目,包括我的項目。使用連接mysql查詢

查詢得到朋友是:

SELECT b.id, b.user, b.title, b.text, b.time 
FROM board b 
JOIN user u ON u.user = b.user 
JOIN friend f ON f.friend_id = u.id 
WHERE f.user_id = 1 
ORDER BY `time` DESC 
LIMIT 0 , 6 

我處理表,其中一些表使用了實際的用戶名,在別人的用戶ID。因此,爲什麼加入。 上面的查詢獲取朋友的所有最新帖子,但是我希望用戶自己的帖子包含在他們自己的帖子中。 例如:

SELECT b.id, b.user, b.title, b.text, b.time 
FROM board b 
JOIN user u ON u.user = b.user 
JOIN friend f ON f.friend_id = u.id 
WHERE f.user_id = 1 
OR b.user = 'the_users_name' 
ORDER BY `time` DESC 
LIMIT 0 , 6 

第二個查詢僅僅返回由於加入6個的用戶的重複行。 我該如何解決這個問題,以便顯示任何用戶帖子和任何朋友帖子?

回答

2

我想用UNION ALL應該做的伎倆:

SELECT b.id, b.user, b.title, b.text, b.time 
FROM board b 
JOIN user u ON u.user = b.user 
JOIN friend f ON f.friend_id = u.id 
WHERE f.user_id = 1 
UNION ALL 
SELECT b.id, b.user, b.title, b.text, b.time 
FROM board b 
JOIN user u ON u.user = b.user 
WHERE u.user_id = 1 
ORDER BY time DESC 
LIMIT 0,6 

第一個查詢應該給你的朋友的帖子和第二會給你的用戶的帖子。 UNION ALL將這些結果組合在一起,並且將&限制的順序應用於組合結果。

+0

謝謝。從來沒有想到工會!我改變了它,所以第二個查詢沒有用戶連接,因爲我使用「用戶」從板選擇:select * from board where user ='the_user_name' – rbruhn

0

使用UNION:http://dev.mysql.com/doc/refman/5.0/en/union.html

SELECT b.id, b.user, b.title, b.text, b.time 
FROM board b 
JOIN user u ON u.user = b.user 
JOIN friend f ON f.friend_id = u.id 
WHERE f.user_id = 1 
UNION ALL 
SELECT b.id, b.user, b.title, b.text, b.time 
FROM board b 
JOIN user u ON u.user = b.user 
JOIN friend f ON f.friend_id = u.id 
WHERE f.user_id = 1 
OR b.user = 'the_users_name' 
ORDER BY `time` DESC 
LIMIT 0 , 6 

類似的東西?