2012-06-23 74 views
-4

我有一個MySQL表格,其中我將存儲用戶的email_id以及用戶的關注者email_id。它的欄目有:查詢到關注關注者數量

ID, USER_EMAIL, FOLLWING_EMAIL 

現在,當用戶在自己的帳戶登錄,我想計算:

  1. 的人數,他是繼
  2. 追隨者的數量

計算的人他後面的數字是簡單的:

select count(*) from list where user_email = <logged-in email> 

但是,我怎樣才能計算出只有一個查詢中有多少人跟着他?

+0

如果您添加的代碼它會是不錯。至少你的數據庫架構 –

+0

我已經給了表結構。 –

+2

@DeveshAgrawal:您的Shift鍵似乎卡住了。你能打一個正常的情況嗎?這也適用於下面的評論。 – Ryan

回答

1
SELECT 
    COUNT(CASE WHEN user_email = '<email>' THEN 1 ELSE NULL END) AS following_cnt, 
    COUNT(CASE WHEN following_email = '<email>' THEN 1 ELSE NULL END) AS follower_cnt 
FROM 
    list 
WHERE 
    '<email>' IN (user_email, following_email) 
+0

+1,不需要子選擇的好方法 – andrewtweber

2

我想你只需要改變你田間的WHERE子句中:

SELECT count(*) FROM list WHERE following_email = '...' 

要計算雙方在一個查詢,使用子查詢:

SELECT 
    (SELECT count(*) FROM list WHERE user_email = '...') AS following, 
    (SELECT count(*) FROM list WHERE following_email = '...') AS followers 

有什麼優化來存儲數據,實現這個功能?

是的。在USER_EMAIL上添加索引,並在FOLLOWING_EMAIL上添加索引。

+0

我可以在一次查詢中計算兩件事嗎? –

0

那麼FOLLOWING_EMAIL是這個用戶所關注的人的電子郵件地址?或者索引到另一個表中?如果是前者,那麼:

SELECT COUNT(*) from list where FOLLOWING_EMAIL="[email protected]"