喂,我举个例子
我的跟踪表

A B
1 2 // same so its friend
2 1 // same so its a friend
1 3 // user 1 is following 3
1 4 // user 1 is following 4


假设我们是用户1如何列出我们的朋友?
我脑子里想的是
SELECT COUNT(*) FROM social WHERE ((A = B) = (B = A)) as friends
// so it will be something like count friends where ( 1 = 2 ) = ( 1 = 2) if you get my logic

或者我们可以这样做吗?
如果成功的话,它将算作1

最佳答案

这应该做到:

SELECT COUNT(me.A) FROM social AS me
   INNER JOIN social AS you ON me.B = you.A
WHERE me.A = you.B AND me.A = 1

如果您想要朋友列表,请删除COUNT
编辑
按要求,解释一下。
因为您对行之间的关系感兴趣,所以您要将一个表转换为自己的表。
我决定将这些表分别命名为JOINme,以明确它们之间的关系。也就是说,列you可以把我称为跟随者,也可以把你称为跟随者。列A指以下
如果要重命名列,查询将更清楚地读取
如果BAfollower>B,我们将:
SELECT COUNT(me.follower) FROM social AS me
   INNER JOIN social AS you ON me.followee = you.follower
WHERE me.follower = you.followee AND me.follower = 1

也就是说,取两份这张表的副本,然后followee中的followere是JOIN中的follower。然后,过滤并只显示me中跟随者是you中跟随者的行。。。通过捕捉你想要的me
也许表别名没那么好,但我希望能澄清一点。
第二次编辑
根据以下评论,更清晰的形式可能是:
SELECT COUNT(me.A) FROM social AS me
   INNER JOIN social AS you ON me.A = you.B AND me.B = you.A
WHERE me.A = 1

关于mysql - 像使用MySQL一样获得关注者Twitter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5113195/

10-13 03:29