Requête de badge pour chaque publication sur un nouveau sujet dans une catégorie ?

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.

Est-ce possible ? Merci !

2 « J'aime »

Quelqu’un peut-il m’aider avec ça ? Ou existe-t-il un guide sur la façon de créer Badge SQL ?

Avez-vous lu Topics tagged sql-triggered-badge ?

Oui, j’ai lu tout cela.

C’est un peu intimidant d’essayer quelque chose car une requête SQL mal formée sur un site en production pourrait très mal se passer.

Y a-t-il un mode test ou quelque chose comme ça ?

J’utilise un serveur de staging pour les expériences.

Avez-vous progressé davantage sur ce point ?

Comment les sujets du club de lecture sont-ils définis ? Sont-ils dans une catégorie distincte ou regroupés par une étiquette ?

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))

1 « J'aime »

J’essaierai bientôt, merci.

1 « J'aime »

Fonctionne très bien, merci !!

1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.