Distintivo por ter outros distintivos específicos

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.

Obrigado!

3 curtidas

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
)
7 curtidas

Thanks for your help, that works perfectly!

1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.