Dopo un confuso intoppo con alcuni Mi piace eliminati che hanno sballato i miei test, penso che questa sia una versione rivista di quella nell’OP che soddisfa i tuoi criteri: ![]()
SELECT p.user_id, MAX(p.created_at) granted_at
FROM badge_posts p
WHERE (SELECT COUNT(*)
FROM post_actions pa
WHERE pa.post_id = p.id
AND post_action_type_id = 2
AND deleted_at IS NULL
AND pa.user_id IN (SELECT gu.user_id FROM group_users gu WHERE gu.group_id = 3)
) >= 5
AND p.user_id >= 0
GROUP BY p.user_id
HAVING COUNT(*) >= 10
Funziona sulla vista badge_posts, quindi conta solo i post dalle categorie pubbliche, cosa che potresti voler prendere in considerazione a seconda della configurazione del tuo forum/delle tue categorie. Inoltre, usare CURRENT_TIMESTAMP per granted_at è un’altra opzione, ma probabilmente è una questione di gusti.
