你好,假设我有一个例子
我的关注表
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
etc
假设我们是用户 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
如果你想要一个朋友名单。
EDIT
根据要求,作出解释。
You're JOIN
因为您对行之间的关系感兴趣,所以将表自身。
我决定将表别名为me
and you
来明确关系。那就是说的那个专栏A
可以称我为follower或者你作为追随者。柱子B
指的是followee
如果您要重命名列,查询会读得更清楚
if A
-> follower
and 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
所以它说,拿这张表的两份副本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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)