2011-08-11 112 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 

类似的东西?