簡體   English   中英

使用MySQL獲取關注者並在一個查詢中關注

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM