Sto lavorando a una query SQL per i badge che assegna un badge agli utenti quando possiedono tutti i badge di un elenco specificato (ad esempio, gli ID 3, 4 e 5).
So che questa query funziona per un singolo badge:
SELECT user_id, count(id), current_timestamp as granted_at
FROM user_badges
WHERE badge_id = 4
GROUP BY user_id
Ma come potrei adattarla per gestire più ID di badge? Aggiungere un’altra condizione badge_id = X non funzionerebbe, perché cercherebbe un solo badge. Intersect sembrerebbe una soluzione, ma non è supportato. Questa query verrebbe eseguita ogni giorno e non riguarderebbe alcun post.
Grazie!
Uso qualcosa di simile per creare un livello utente alternativo per i miei membri.
Puoi sostituire ib.badge_id con l’ID del badge che i tuoi membri dovrebbero aver ottenuto.
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
)