[英]Get followers and following in one query using MySQL
好吧,我想說我正在創建像twitter這樣的社交網絡。 我有一張名為“社交”的表格,在這里我們將社交內容放在哪里。
example me ( uid = 1 )
friend1 ( uid = 2 )
friend2 ( uid = 3 )
桌子
SID AUID BUID
1 1 2
2 1 3
3 2 1
我們在這里得到的信息是
user id 1(me) is following 2
user id 1(me) is following 3
user id 2 is following 1(me)
問題是: 我們可以在一個查詢中執行以下兩個查詢嗎?
function CountFollowers($uid){
$count = $this->fetch("SELECT COUNT(BUID) as followers
FROM social WHERE BUID = :uid",
array( 'uid' => $uid));
return $count;
}
和
function CountFollowing($uid){
$count = $this->fetch("SELECT COUNT(AUID) as following
FROM social WHERE AUID = :uid",
array( 'uid' => $uid));
return $arrayofdata;
}
謝謝你的關注
這將為您提供兩列,包括關注者和關注者
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
你需要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
或者你可以用不同的方式做到:
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)
如果(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.