Hallo @Firepup650
Vielleicht versuchen Sie es mit diesem. Es hat auf meiner Instanz funktioniert.
<CATEGORY NAME> = Groß-/Kleinschreibung beachtender Kategoriename (nicht Slug)
<GROUP> = Gruppenname (z.B. Staff, Trust_level_0)
<MINIMUM LIKE COUNT> = Mindestanzahl an Likes, die Sie festlegen möchten
<POST COUNT THRESHOLD> = Mindestanzahl an Beiträgen
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 '<CATEGORY NAME>'
) 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 '<GROUP NAME>' )
)
) >= <MINIMUM LIKE COUNT>
AND p.user_id >= 0
GROUP BY p.user_id
HAVING count(*) >= <POST COUNT THRESHOLD>
Für mehrere Kategorien können Sie Folgendes tun:
<CATEGORY NAMES> = Groß-/Kleinschreibung beachtende Kategorienamen
<GROUP> = Gruppenname (z.B. Staff, Trust_level_0)
<MINIMUM LIKE COUNT> = Mindestanzahl an Likes, die Sie festlegen möchten
<POST COUNT THRESHOLD> = Mindestanzahl an Beiträgen
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['<CATEGORY NAME 1>', '<CATEGORY NAME 2>', '<CATEGORY NAME 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 '<GROUP>' )
)
) >= <MINIMUM LIKE COUNT>
AND p.user_id >= 0
GROUP BY p.user_id
HAVING count(*) >= <POST COUNT THRESHOLD>