У меня есть один вариант, над которым я работал, но отложил его, чтобы позже взглянуть свежим взглядом, и пока ещё не вернулся к нему, так что, возможно, его нужно доработать. Цель — выдать бейдж за наличие хотя бы 10 постов с реакцией
, поставленной участником из группы ‘data-team’ в категории #data-reporting:
SELECT p.user_id, MIN(p.created_at) granted_at
FROM badge_posts p
JOIN topic_tags tt ON tt.topic_id = p.topic_id
WHERE tt.tag_id = 615
AND EXISTS (
SELECT 1
FROM discourse_reactions_reactions dr
JOIN discourse_reactions_reaction_users dru ON dr.id = dru.reaction_id
JOIN group_users gu ON gu.user_id = dru.user_id
WHERE dr.post_id = p.id
AND dr.reaction_value = 'chefs_kiss'
AND gu.group_id = 175
)
GROUP BY p.user_id
HAVING COUNT(*) >= 10
Хотя меня не устраивало использование MIN, так как оно выдавало неверную дату вручения.
В этом варианте много критериев, и он автоматический, что, на мой взгляд, относит его к более сложным. Думаю, более простой вариант можно реализовать гораздо легче и без особых усилий.