2013-10-24 14 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