简体   繁体   English

使用MySQL获取关注者并在一个查询中关注

[英]Get followers and following in one query using MySQL

Ok lets say I'm making a social networks like twitter. 好吧,我想说我正在创建像twitter这样的社交网络。 I have a table called social where it gets or where we put our social thing. 我有一张名为“社交”的表格,在这里我们将社交内容放在哪里。

example me ( uid = 1 )
friend1 ( uid = 2 )
friend2 ( uid = 3 )

The table 桌子

SID AUID BUID
1   1    2
2   1    3
3   2    1

The information that we get here is 我们在这里得到的信息是

user id 1(me) is following 2
user id 1(me) is following 3
user id 2 is following 1(me)

And the question is: Can we do something like the two queries below in one single query ? 问题是: 我们可以在一个查询中执行以下两个查询吗?

function CountFollowers($uid){
    $count = $this->fetch("SELECT COUNT(BUID) as followers
                                   FROM social WHERE BUID = :uid", 
    array( 'uid' => $uid));
    return $count;
}

and

function CountFollowing($uid){
    $count = $this->fetch("SELECT COUNT(AUID) as following
                                   FROM social WHERE AUID = :uid", 
    array( 'uid' => $uid));
    return $arrayofdata;
}

Thanks for looking in 谢谢你的关注

This gets you two columns with the count of following and followers 这将为您提供两列,包括关注者和关注者

SELECT (SELECT COUNT(BUID) as count FROM social WHERE BUID = :uid) as Followers
  , (SELECT COUNT(AUID) as count FROM social WHERE AUID = :uid) as Following

Do you need UNION ? 你需要UNION吗?

SELECT 'followers' as `type`, COUNT(BUID) as count FROM social WHERE BUID = :uid
UNION
SELECT 'following' as `type` COUNT(AUID) as count FROM social WHERE AUID = :uid

Or you can do it in a different way : 或者你可以用不同的方式做到:

SELECT COUNT(CASE 
WHEN BUID =:uid THEN 1
END) as  Followers,
COUNT(CASE
WHEN AUID=:uid THEN 1
END) as Following
 FROM social WHERE BUID = :uid OR AUID = :uid
SELECT
  COUNT(DISTINCT NULLIF(AUID, :uid)) AS MyFollowers,
  COUNT(DISTINCT NULLIF(BUID, :uid)) AS MeFollowing
FROM atable
WHERE :uid IN (AUID, BUID)

If (AUID, BUID) pairs are unique, then DISTINCT is not needed: 如果(AUID, BUID)对是唯一的,则不需要DISTINCT

SELECT
  COUNT(NULLIF(AUID, :uid)) AS MyFollowers,
  COUNT(NULLIF(BUID, :uid)) AS MeFollowing
FROM atable
WHERE :uid IN (AUID, BUID)
Select Sum( Case When AUID = $uid Then 1 Else 0 End ) As Following , Sum( Case When BUID = $uid Then 1 Else 0 End ) As Followers From Table Where AUID = $uid Or BUID = $uid

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM