Tengo una insignia que mis miembros pueden ganar varias veces, es una insignia de “Club de Lectura” - se les otorga por discutir el libro del mes.
Cada mes, se crea un nuevo tema sobre el próximo libro, y todos los que respondan deberían recibir la insignia; esto se hace actualmente manualmente y es un verdadero fastidio.
Me preguntaba si alguien podría ayudarme a crear una insignia SQL para solucionar esto.
El usuario debe recibir un máximo de una insignia por tema, la primera vez que publique en ese tema. Es la misma insignia cada vez, que se gana varias veces.
No más. Estoy perplejo por el factor de concesión múltiple.
Todos los temas están en la misma categoría. Esa categoría está bloqueada para que solo el personal pueda crear publicaciones allí, por lo que es seguro otorgar automáticamente a cualquier respuesta en la categoría.
Pero quiero que:
Otorgue una insignia por la primera respuesta de cada persona en cada tema, pero solo una vez por tema.
Un usuario puede obtener múltiples de la misma insignia cada vez que responde a un tema diferente de la misma categoría.
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 -- replace with the category_id of your book club
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))