¿Alguien ha creado alguna consulta SQL para mostrar una lista de usuarios (quizás los 10 primeros), ordenada por el número total de insignias que tienen?
He revisado un poco el Explorador de Datos y he examinado la tabla “user_badges”; puedo ver que hay una columna “user_id” y una columna “badge_id”, pero no tengo suficiente experiencia en SQL para ejecutar algún tipo de consulta de conteo o unión que produzca una lista de los diez primeros.
-- [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
Sí. Muchas insignias tienen la opción de ganarlas más de una vez.
Verifica esto si es más preciso:
-- [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