我有两个表,分别为 users
和 fans
。
users
表如下所示:
id | name
---------
1 | John
2 | Mark
3 | Bill
4 | Steve
5 | Jeff
这是粉丝
表:
fan | user
1 | 2
1 | 5
2 | 3
2 | 4
2 | 5
“粉丝”是关注该用户的用户,“用户”是被关注的用户。现在,如果我们将 John (id 1) 作为当前用户,并且考虑到 John 正在关注 Mark (id 2),我们如何才能获取 John 正在关注的每个人的关注,而不是 John 已经关注的用户(In在这种情况下,John 正在关注 Mark。Mark 正在关注用户 3、4 和 5,但只应返回 3 和 4,因为 John 已经关注用户 5。)?我尝试使用 IN 运算符执行此操作,但我不确定它是否可以随着更多条目而很好地扩展。任何帮助将不胜感激。
最佳答案
您必须加入多个粉丝
副本:
SELECT f1.user
FROM fans f1
INNER JOIN fans f2 ON f2.user = f1.fan
LEFT JOIN fans f3 ON f3.fan = f2.fan AND f3.user = f1.user
WHERE f2.fan = ? AND f3.fan IS NULL;
如果您还想要用户的姓名:
SELECT u.*
FROM users u
INNER JOIN fans f1 ON f1.user = u.ID
INNER JOIN fans f2 ON f2.user = f1.fan
LEFT JOIN fans f3 ON f3.fan = f2.fan AND f3.user = f1.user
WHERE f2.fan = ? AND f3.fan IS NULL;
将 ?
更改为您想要的用户 ID。
请参阅demo .
关于mysql - 获取我在 SQL 中关注的用户的关注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71988385/