我有一个这样的MySQL表
+----+------+--------+
| id | name | ref_by |
+----+------+--------+
| 1 | SM | |
+----+------+--------+
| 2 | MO | 1 |
+----+------+--------+
| 3 | Go | 2 |
+----+------+--------+
| 4 | ZZ | 1 |
+----+------+--------+
这是一个用户表,其中的“ ref_by”列中包含引用该用户的用户的ID。
我想选择推荐次数最多的前10名用户。 我在PHP上通过搜索用户ID并计算推荐用户来做到这一点。那太浪费时间了。
什么是有效的查询,它将产生如下结果:
name ref_count
SM 2
MO 1
答案 0 :(得分:1)
我们可以在此处尝试使用自联接:
SELECT
t1.name,
COUNT(t2.id) AS ref_count
FROM yourTable t1
LEFT JOIN yourTable t2
ON t1.id = t2.ref_by
GROUP BY
t1.name
ORDER BY
ref_count DESC
LIMIT 10;
注意:如果您不想看到引用计数为零的名称,请在上面的查询中添加以下HAVING
子句:
HAVING ref_count > 0