2013-10-24 18 views
2

我實際上在Top10邀請列表中顯示邀請大多數其他用戶的用戶。MySQL的Top10列表與計數器只使用一個查詢

這就是數據庫表:

user_id | name  | invited_by 
----------------------------------- 
1  | john  | 0 
2  | maria  | 1 
3  | johanna | 1 
4  | natasha | 1 
5  | julia  | 4 
6  | antonio | 4 
7  | matthias | 5 
8  | daniel  | 5 
9  | michelle | 5 
10  | anna  | 5 

(默認值爲0)在invited_by列中的數字等於誰邀請此人

所以我的前10頁會顯示USER_ID:

TOP邀請人:

  1. Ĵ ulia(4個邀請)
  2. 約翰(3個邀請)
  3. 娜塔莎(2個邀請)

等等......

我現在的問題是,我可以實現這個只一個mysql查詢包含總計邀請計數器,最終帶有子查詢,如果是,則該查詢必須如何?

$sql = "SELECT * FROM table_users ...... LIMIT 10" 

而對於性能原因,該表風格和用戶的百萬,有沒有可能理清的是沒有邀請別人,或許與之前in_array檢查的人嗎?

此致敬禮。

回答

3

集團自連接,然後進行排序和限制結果:

SELECT invitor.name, COUNT(*) AS invites 
FROM  table_users invitor 
    JOIN table_users invitee ON invitee.invited_by = invitor.user_id 
GROUP BY invitor.user_id 
ORDER BY invites DESC 
LIMIT 10 
+0

非常感謝eggyal,它的工作就像一個魅力:) – lickmycode