MySQL Top10列表,只使用一个查询计数器

时间:2013-10-24 19:04:13

标签: php mysql count group-by sql-order-by

我实际上正在开发一个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

invite_by列中的数字(默认= 0)等于邀请此人的user_id

所以我的前10页会显示:

  

热门邀请函:

     
      
  1. 朱莉娅(4邀请)
  2.   
  3. 约翰(3邀请)
  4.   
  5. 娜塔莎(2邀请)
  6.   

等等......

我现在的问题是,我是否可以通过一个包含总邀请计数器的mysql查询来实现这一点,最终使用子查询,如果是,则该查询必须如何?

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

出于性能原因,有了这种桌面风格和数百万用户,有没有机会整理那些尚未邀请某人的人,可能之前进行in_array检查?

最好的问候。

1 个答案:

答案 0 :(得分: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