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

2 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
Run Code Online (Sandbox Code Playgroud)

等等

让我们说我们是用户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
Run Code Online (Sandbox Code Playgroud)

或者我们能以某种方式这样做吗?

如果它工作,它将计为1

Dan*_*umb 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
Run Code Online (Sandbox Code Playgroud)

COUNT如果你想要一个朋友列表,请删除它.

编辑

根据要求,解释.

你是JOIN一张桌子,因为你对行之间的关系感兴趣.

我决定别名表作为me,并you作出明确的关系.这就是说专栏A可以称我为追随者,或者你是追随者.列B是指跟随者

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

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
Run Code Online (Sandbox Code Playgroud)

所以它说,取这个表的两个副本和JOINfollowee in 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
Run Code Online (Sandbox Code Playgroud)