Quelqu’un a-t-il créé une requête SQL pour afficher une liste d’utilisateurs (les 10 premiers par exemple), classés par le nombre total de badges qu’ils possèdent ?
J’ai fait quelques recherches dans l’Explorateur de données et examiné la table « user_badges ». Je vois qu’il existe une colonne « user_id » et une colonne « badge_id », mais je ne suis pas assez compétent en SQL pour exécuter une requête de type compte ou jointure afin de produire une liste des dix premiers.
Quelqu’un a-t-il déjà réalisé quelque chose de similaire ?
-- [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
Oui. Beaucoup de badges offrent la possibilité d’être gagnés plus d’une fois.
Vérifiez ceci pour plus de précision :
-- [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