Je travaille sur une requête SQL pour les badges qui accorde un badge aux utilisateurs lorsqu’ils possèdent tous les badges d’une liste spécifiée. (Par exemple, les identifiants 3, 4 et 5).
Je sais que cette requête de badge fonctionne pour un seul badge :
SELECT user_id, count(id) , current_timestamp granted_at
FROM user_badges
WHERE badge_id=4
GROUP BY user_id
Mais comment rendre cela applicable à plusieurs identifiants de badge ? Ajouter un autre badge_id = X ne fonctionnera pas car cela recherche un seul badge. Intersect semble être une solution, mais il n’est pas pris en charge. Cette requête sera exécutée quotidiennement et ne ciblera aucun message.
Merci !
J’utilise quelque chose comme ceci pour créer un niveau utilisateur alternatif pour mes membres.
Vous pouvez remplacer ib.badge_id par l’ID de badge que vos membres doivent avoir atteint.
SELECT user_id, CURRENT_TIMESTAMP granted_at, NULL post_id
FROM user_badges pb
WHERE badge_id = 1
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 11
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 124
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 123
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 127
)
AND EXISTS (
SELECT 1 FROM user_badges ib
WHERE pb.user_id = ib.user_id
AND ib.badge_id = 5
)