Salut @Firepup650
peut-être essayer celui-ci. il a fonctionné sur mon instance.
<NOM DE CATÉGORIE> = Nom de catégorie sensible à la casse (pas le slug)
<GROUPE> = Nom du groupe (par exemple : Staff, Trust_level_0)
<NOMBRE MINIMUM DE LIKES> = nombre minimum de likes que vous souhaitez définir
<SEUIL DE NOMBRE DE MESSAGES> = nombre minimum de messages
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.category_id = (
SELECT id FROM categories WHERE name ilike '<NOM DE CATÉGORIE>'
) AND (
SELECT count(*)
FROM post_actions pa
WHERE pa.post_id = p.id
AND post_action_type_id = (
SELECT id FROM post_action_types WHERE name_key = 'like'
) AND pa.user_id IN (
SELECT gu.user_id
FROM group_users gu
WHERE gu.group_id = ( SELECT id FROM groups WHERE name ilike '<NOM DE GROUPE>' )
)
) >= <NOMBRE MINIMUM DE LIKES>
AND p.user_id >= 0
GROUP BY p.user_id
HAVING count(*) >= <SEUIL DE NOMBRE DE MESSAGES>
pour plusieurs catégories, vous pouvez faire ceci :
<NOMS DE CATÉGORIES> = Noms de catégories sensibles à la casse
<GROUPE> = Nom du groupe (par exemple : Staff, Trust_level_0)
<NOMBRE MINIMUM DE LIKES> = nombre minimum de likes que vous souhaitez définir
<SEUIL DE NOMBRE DE MESSAGES> = nombre minimum de messages
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.category_id IN (
SELECT id FROM categories WHERE name ILIKE ANY (ARRAY['<NOM DE CATÉGORIE 1>', '<NOM DE CATÉGORIE 2>', '<NOM DE CATÉGORIE 3>'])
) AND (
SELECT count(*)
FROM post_actions pa
WHERE pa.post_id = p.id
AND post_action_type_id = (
SELECT id FROM post_action_types WHERE name_key = 'like'
) AND pa.user_id IN (
SELECT gu.user_id
FROM group_users gu
WHERE gu.group_id = ( SELECT id FROM groups WHERE name ILIKE '<GROUPE>' )
)
) >= <NOMBRE MINIMUM DE LIKES>
AND p.user_id >= 0
GROUP BY p.user_id
HAVING count(*) >= <SEUIL DE NOMBRE DE MESSAGES>