У меня есть значок, который мои участники могут получать несколько раз — это значок «Книжный клуб». Он выдается за обсуждение книги месяца.
Каждый месяц создается новая тема о следующей книге, и все, кто отвечает, должны получать этот значок. В настоящее время это делается вручную, что очень утомительно.
Подскажите, пожалуйста, можно ли помочь мне составить SQL-запрос для значка, чтобы решить эту проблему?
Пользователь должен получать не более одного значка за тему — только при первом своем сообщении в этой теме. Это всегда один и тот же значок, который можно получать многократно.
Чуть-чуть страшно просто попробовать что-то на практике, так как некорректно составленный SQL-запрос на рабочем сайте может привести к серьёзным проблемам.
Дальше не буду. Я запутался в факторе множественного присвоения.
Все темы находятся в одной категории. Эта категория закрыта, поэтому создавать посты там могут только сотрудники, так что можно автоматически присваивать награды за любые ответы в этой категории.
Но мне нужно, чтобы система:
Присваивала значок за первый ответ каждого пользователя в каждой теме, но только один раз за тему;
Позволяла пользователю получать несколько одинаковых значков каждый раз, когда он отвечает в разных темах одной и той же категории.
WITH book_club_first_posts AS (
SELECT
p.topic_id,
p.user_id,
MIN(p.id) AS post_id
FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE t.category_id = 5 -- замените на category_id вашего книжного клуба
AND p.deleted_at ISNULL
AND t.deleted_at ISNULL
AND p.post_type = 1
AND p.post_number <> 1
AND p.user_id > 0
GROUP BY p.topic_id, p.user_id
)
SELECT bcfp.user_id, bcfp.post_id, p.created_at granted_at
FROM book_club_first_posts bcfp
JOIN posts p ON p.id = bcfp.post_id
WHERE (:backfill OR p.id IN (:post_ids))