使用连接的mysql查询

时间:2011-08-11 20:40:13

标签: mysql join

我正在尝试编写一个查询,选择朋友以及特定用户发布的最新“董事会”条目。意思是,如果我是查看此部分的用户,它会显示最新的6个板项目,包括我的,如果我发布了一些东西。

获取朋友的查询是:

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 个答案:

答案 0 :(得分: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将这些结果组合在一起,并将顺序与&限制适用于综合结果。

答案 1 :(得分: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

那样的东西?