mysql - 获取我在 SQL 中关注的用户的关注

标签 mysql sql join select left-join

我有两个表,分别为 usersfans
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/

相关文章:

sql - NHibernate 应用程序中的相同 SQL 查询比 SQL Studio 慢?

php - SQL:插入$_POST并输出JSON

mysql索引添加

php - 使用 PDO 引发异常 "could not find driver"

mysql - 在mysql中,如何在字段中具有0或1值的一组记录中选择值1的记录(仅当存在时)?

sql - RIGHT JOIN 是处理此查询的方法吗?

php - 使用 group by condition 使结果唯一

mysql - SQL中的Join语句

mysql - 在 JOIN 之前对两个表执行 SELECT

php - 检查字段是否完整并插入新数据