gpt4 book ai didi

mysql - 基于条件多连接获取唯一记录

转载 作者:行者123 更新时间:2023-11-30 23:00:09 27 4
gpt4 key购买 nike

我有 4 个表:postsusersmentionsfollowing

posts
----------------------------
id | user_id | post_text
1 1 foo
2 1 bar
3 2 hello
4 3 jason

users
------------
id | name
1 jason
2 nicole
3 frank

mentions
--------------------------
id | post_id | user_id
1 4 1


following
-------------------------------------------------
id | user_id | user_id_of_user_being_followed
1 1 2

posts 包括发布一些文本的用户的 user_idusers 包含用户的用户 ID 和名称mentions 包含提及 1 个或多个其他用户的任何帖子的帖子 ID 和用户 IDfollowing 有一个用户 ID 和他们正在关注的用户(用户可以关注 0 到许多用户)

我想做的是返回给定用户关注的用户 a 的所有帖子,以及提及该用户的所有帖子(无论给定用户是否关注),而不返回任何重复内容。

SELECT p.id, p.post, u.name, 
FROM following f
JOIN posts p ON f.following = p.user_id
JOIN users u ON u.id = p.user_id
WHERE f.user_id = :user;

上面返回了给定用户正在关注的用户的所有帖子,但我正在努力弄清楚如何也包括提及(请记住,用户不必关注某人就可以看到他们的帖子'已经提到过)。

更新:感谢 John R 我能够弄清楚这一点:

SELECT DISTINCT(p.id), p.post, u.name 
FROM posts p
LEFT JOIN following f ON f.following = p.user_id
LEFT JOIN mentions m ON m.posts_id = p.id
JOIN users u ON u.id = p.user_id
WHERE (f.user_id = :user_id OR m.user_id = :user_id)

最佳答案

如果我正确理解你的问题,你会想要一个左连接来包含任何提及..但不过滤掉任何关注者/帖子

如果你可以添加一些样本数据来玩,我可以确保它按照你想要的方式工作......

SELECT 
if(p.id is not null, p.id, p1.id) as post_id,
if(p.post is not null, p.post, p1.post) as post_text,
u.username, m.id, m.user_id
FROM posts p
JOIN users u on u.id = p.user_id
JOIN following f on f.user_id_of_user_being_followed = u.id
LEFT JOIN mentions m on m.user_id = f.user_id
LEFT JOIN posts p1 on p1.id = m.post_id
WHERE f.user_id = :user or m.user_id = :user;

我将 join mentions 留在了帖子中,并且当 mention 表中的 user_id 等于指定用户时,以过滤掉其他用户。左连接不应该改变返回的行数..但只包括任何提及


编辑: WORKING FIDDLE

在玩弄它之后,我意识到它试图将所有数据放在一行中。试试这个:

(
SELECT p.id, p.post_text, u.name
FROM posts p
JOIN users u on u.id = p.user_id
JOIN following f on f.user_id_of_user_being_followed = u.id
WHERE f.user_id = 1
)
UNION
(
SELECT p.id, p.post_text, u.name
FROM following f
JOIN mentions m on m.user_id = f.user_id
JOIN posts p on p.id = m.post_id
join users u on u.id = p.user_id
WHERE f.user_id = 1
);

关于mysql - 基于条件多连接获取唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457960/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com