Donc, je créais une requête de badge personnalisée. J’en ai déjà créé une avec succès et je l’ai enregistrée. Celle-ci fonctionnait sans aucune erreur :
SELECT user_id, 0 post_id, current_timestamp granted_at
FROM badge_posts
WHERE (:backfill OR user_id IN (:user_ids) OR 0 NOT IN (:post_ids) )
GROUP BY user_id
HAVING count(*) > 499
Je l’ai obtenue ici : Some common badge queries
Le déclencheur que j’ai choisi pour cela était « Après qu’un message est traité » au lieu de « Lorsqu’un utilisateur modifie ou crée un message ». Si je change le déclencheur pour ce dernier, une erreur apparaît.
J’ai essayé de trouver plus d’informations sur les différents déclencheurs et le seul sujet que j’ai pu trouver est ici : Creating triggered custom badge queries
Presque toutes mes requêtes de badge dépendent du nombre de messages ou de réponses, ou de la création de sujets dans une catégorie spécifique.
J’essaie de comprendre quelle est la différence entre ces 3 déclencheurs et quand les choisir en fonction de la requête ?
- Après qu’un message est traité
- Lorsqu’un utilisateur agit sur un message
- Lorsqu’un utilisateur modifie ou crée un message
Pourquoi ai-je eu une erreur en choisissant le #3 comme déclencheur, mais pas en choisissant le #1 ?
J’ai essayé de créer une autre requête de badge en utilisant celle-ci :
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'foo'
) AND p.post_number = 1
GROUP BY p.user_id
où ‘foo’ serait l’identifiant (slug) de ma catégorie. Cette fois, si je laisse le déclencheur vide ou si je choisis « Mettre à jour quotidiennement », cela s’enregistre sans aucune erreur. Si je change le déclencheur pour l’un des 1 à 3 ci-dessus, une erreur se produit.
Je pense que c’est parce que la requête SQL manque d’informations sur la façon de la déclencher en fonction de :post_ids ? Si j’ai raison, comment corrigerais-je la requête ci-dessus pour qu’elle ne soit pas quotidienne, mais qu’elle se déclenche à chaque nouveau message dans la catégorie foo ?
Toute explication serait appréciée, ou une référence vers un endroit où je pourrais en savoir plus sur les déclencheurs.