我实际上正在处理 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
invited_by列中的数字(默认=0)等于邀请此人的user_id
所以我的前 10 个页面将显示:
TOP INVITERS:
- Julia (4 invites)
- John (3 invites)
- Natasha (2 invites)
等等……
我现在的问题是,我能否仅通过一个包含总邀请计数器的 mysql 查询来实现这一点,最终通过一个子查询来实现这一点,如果可以,那么该查询必须如何实现?
$sql = "SELECT * FROM table_users ...... LIMIT 10"
出于性能原因,使用这种表格样式和数百万用户,是否有机会挑选出尚未邀请某人的人,也许之前使用 in_array
检查?
最好的问候。
最佳答案
对自连接进行分组,然后对结果进行排序和限制:
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
关于php - 仅使用一个查询的带有计数器的 MySQL 前 10 名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574410/