Après un petit problème avec la suppression de Likes qui a faussé mes tests, je pense que voici une version révisée de celle dans le OP qui correspond à vos critères : ![]()
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
Elle fonctionne à partir de la vue badge_posts, donc elle ne compte que les publications des catégories publiques, ce que vous voudrez peut-être prendre en considération en fonction de la configuration de votre forum/catégories. De plus, utiliser CURRENT_TIMESTAMP pour granted_at est une autre option, mais c’est probablement une question de goût.
