2015-01-15 42 views
0

我工作的一個項目,前5個最流行的價值觀,我有一個問題。我有一個名爲friends三列idfrom_emailto_email表(這是一個社交網站和「FROM_EMAIL」是遵循「to_email」的人)。我想要根據他們的追隨者人數來查詢我返回的前5名朋友。我知道前5名的查詢是:獲得MySQL中使用where子句

SELECT 
    to_mail, 
    COUNT(*) AS friendsnumber 
FROM 
    friends 
GROUP BY 
    to_email 
ORDER BY 
    friendsnumber DESC 
LIMIT 5 

任何想法?

我也想用同樣數量的按名稱排序追隨者返回朋友。可能嗎?

+0

什麼任何想法? – zerkms

+0

示例SQL與您問題中提到的列完全不一致。請編輯SQL以使用相同的列/表名稱。 – Bohemian

+0

此代碼從整個表返回5個最流行的價值觀,但我想這回的5最受歡迎的人跟着我(當我的電子郵件是在FROM_EMAIL列) –

回答

1

您應該使用COUNT(from_email)代替COUNT(*);因爲你想計算關注者的數量,這由from_email表示。

因此,您的選擇條款是這樣的:

SELECT to_email, COUNT(from_email) as magnitude 

爲讓您按照最受歡迎的人,你可以使用IN條款:

WHERE to_email IN (SELECT to_email FROM friends WHERE from_email='MY_EMAIL'); 

和有關的名字,你應將此查詢與包含name值的其他表結合起來。

既然你已經得到了要領,現在,我希望你可以嘗試編寫你自己的完整的查詢=)

+0

太謝謝你了!我很絕望! –

+0

沒問題;你可以做到這一點〜 –

0

表中再次加入了二線計數:

SELECT f1.to_email 
FROM friends f1 
JOIN friends f2 on f2.to_mail = f1.to_email 
WHERE f1.from_email = 'myemail' 
GROUP BY 1 
ORDER BY count(*) DESC 
LIMIT 5 

如果在to_email上定義了索引,這將會表現得非常好。

+1

我想我有點困惑。你能解釋一下嗎? –

+0

@Kon第一次訪問「朋友」(別名爲'f1')時,它會返回*您的*關注者(通過where子句指定您的關注者)。第二次訪問(別名爲「f2」)時,它會連接到第一次行(通過'on'子句)返回您的*關注者*關注者。計數進行排序。它工作嗎? – Bohemian

+0

@波希米亞♦除了爲這個好的查詢添加更多的解釋外,我想你也可能想修改它;它產生了錯誤的結果。 OP希望「我追隨的人」,而不是「追隨我的人」。 –