像使用MySQL一样获得追随者的推特

时间:2011-02-25 03:12:00

标签: mysql sql

你好说我有一个例子

我的关注表

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

1 个答案:

答案 0 :(得分:5)

这应该这样做:

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

修改

根据要求,解释。

你是JOIN自己的表,因为你对行之间的关系感兴趣。

我决定将这些表别名为meyou,以使关系清晰明了。这就是说A列可以将我称为关注者或您作为关注者。列B指的是 followee

如果要重命名列,查询会更清楚地读取

if A - > followerB - > followee,我们有:

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

所以它说,取这个表的两个副本,JOIN me中的跟随者是you中的关注者的行。然后,过滤并仅显示me中的关注者是you中的关注者的行... ...通过捕获您希望拥有(A == B) && (B == A)

的行

也许表别名不是那么好,但我希望澄清一点。

第二次编辑 根据以下评论,更清晰的形式可能是:

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