Estou trabalhando em uma consulta SQL para conceder um emblema aos usuários quando eles tiverem todos os emblemas de uma lista específica (por exemplo, IDs 3, 4 e 5).
Sei que esta consulta de emblema funciona para um único emblema:
SELECT user_id, count(id), current_timestamp AS granted_at
FROM user_badges
WHERE badge_id = 4
GROUP BY user_id
Mas como faria para aplicar isso a vários IDs de emblema? Adicionar outro badge_id = X não funcionará, pois isso procura por um único emblema. Intersect parece ser a solução, mas não é suportado. Esta consulta será executada diariamente e não terá como alvo nenhuma postagem.
I use something like this to create Alternative User Level for my members.
You can replace ib.badge_id with the badge id your members should have achieved.
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
)