使用连接的mysql查询

使用连接的mysql查询,mysql,join,Mysql,Join,我正在尝试编写一个查询,以选择朋友以及特定用户发布的最新“board”条目。也就是说,如果我是查看此部分的用户,它将显示包括我在内的最新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

我正在尝试编写一个查询,以选择朋友以及特定用户发布的最新“board”条目。也就是说,如果我是查看此部分的用户,它将显示包括我在内的最新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个重复行。
如何修复此问题,使其显示任何用户帖子和任何朋友帖子?

我认为使用
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
第一个查询将为您提供好友帖子,第二个查询将为您提供用户帖子。
联合所有
将这些结果组合在一起,并将order by&limit应用于组合结果。

使用联合:


像这样的吗?

谢谢。从来没有想过工会!!我更改了它,因此第二个查询没有用户加入,因为我正在使用“user”从板中选择:select*from board where user='the_user_name'
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