2

我实际上正在处理 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)等于邀请此人的 user_id

所以我的前 10 页将显示:

顶级邀请者:

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

等等...

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

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

并且出于性能原因,以这种表格样式和数百万用户,是否有机会整理出尚未邀请某人的人,也许in_array之前有检查?

此致。

4

1 回答 1

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
于 2013-10-24T19:06:19.460 回答