查找拥有最多徽章的“前 X"用户

是否有人编写过 SQL 语句来显示用户列表(例如前 10 名),并按用户拥有的徽章总数排序?

我曾在数据浏览器中查看过"user_badges"表,发现其中包含"user_id"列和"badge_id"列,但我的 SQL 技能尚不足以执行计数或连接查询来生成前 10 名的列表。

是否有人已经做过类似的事情?

按徽章数量排序的用户

测试以下内容:

-- [参数]
-- int :posts = 100
-- int :top = 10
SELECT u.username, count(ub.id) as "Badges"
FROM user_badges ub, users u, user_stats us
WHERE u.id = ub.user_id
AND u.id = us.user_id
AND us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
GROUP BY u.username
ORDER BY count(ub.id) desc
LIMIT :top

你好 @SidV :wave:t2:

这工作得相当不错,谢谢!

不过它还不够准确……

以下是我得到的结果:

但将鼠标悬停在其中一些用户上时,显示的数字却不同。

Memento 有 44(而不是 48):

Brian 有 33(而不是 35):

而 Paul 确实有 34!

如果我移除排除管理员的那一行,情况会变得有些混乱:

Ping 有 52(而不是 179):

但 Ozone 确实有 47:

@SidV,你知道是什么导致了这些不准确吗?

再次感谢你的帮助 :smiley:

是的。许多徽章都有多次获得的选项。:thinking:

如果这样更准确,请查看:

-- [params]
-- int :posts = 100
-- int :top = 10
SELECT u.username, count(ub.id) as "Badges"
FROM user_badges ub, users u, user_stats us, badges b
WHERE u.id = ub.user_id
AND u.id = us.user_id
AND b.id = ub.badge_id
AND us.post_count > :posts
AND (u.admin = 'f' AND u.moderator = 'f')
AND b.multiple_grant = 'f'
GROUP BY u.username
ORDER BY count(ub.id) desc
LIMIT :top

哎呀!:man_facepalming:t2:

是的,当然 :blush:

不过,您更新的回复正是我需要的 :clap:t2:

非常感谢 @SidV :bowing_man:

很高兴能为您提供帮助!

查询列表已更新 :rocket:

祝您圣诞快乐!:christmas_tree: