我正在尝试编写一个查询,选择朋友以及特定用户发布的最新“董事会”条目。意思是,如果我是查看此部分的用户,它会显示最新的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个重复行。 我如何解决此问题,以便显示任何用户帖子和任何朋友帖子?
答案 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
那样的东西?