Alguém conseguiu criar um SQL para exibir uma lista de usuários (talvez os 10 primeiros), ordenados pelo número total de Badges que possuem?
Fiquei dando uma olhada no Data Explorer e examinei a tabela “user_badges”. Vi que há as colunas “user_id” e “badge_id”, mas não tenho habilidade suficiente em SQL para executar algum tipo de consulta com contagem ou junção que produza uma lista dos dez primeiros.
-- [params]
-- 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
Sim. Muitos emblemas têm a opção de ser ganhos mais de uma vez.
Confira se esta versão é mais precisa:
-- [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