你好,我想说一个例子
我的关注表
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
这应该这样做:
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- > follower和B- > 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)
| 归档时间: |
|
| 查看次数: |
1328 次 |
| 最近记录: |