J’ai un badge que mes membres peuvent gagner plusieurs fois, c’est un badge « Club de lecture » - ils le reçoivent pour avoir discuté du livre du mois.
Chaque mois, un nouveau sujet est créé sur le livre suivant, et tous ceux qui répondent devraient recevoir le badge - cela se fait actuellement manuellement et c’est une vraie corvée.
Je me demandais si quelqu’un pouvait m’aider à créer un Badge SQL pour résoudre ce problème.
L’utilisateur devrait recevoir au maximum un badge par sujet, la première fois qu’il publie dans ce sujet. C’est le même badge à chaque fois, qui est gagné plusieurs fois.
Je ne vais pas plus loin. Je suis bloqué par le facteur d’attribution multiple.
Tous les sujets sont dans la même catégorie. Cette catégorie est verrouillée de sorte que seul le personnel peut y créer des publications, il est donc sûr d’attribuer automatiquement à toute réponse dans la catégorie.
Mais je veux que cela :
Attribue un badge pour la première réponse de chaque personne dans chaque sujet, mais une seule fois par sujet
Un utilisateur peut obtenir plusieurs fois le même badge chaque fois qu’il répond à un sujet différent de la même catégorie
Je pense que quelque chose comme ceci pourrait fonctionner :
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 -- remplacez par le category_id de votre club de lecture
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))