Quindi stavo creando una query per un badge personalizzato. Ne ho già creata una con successo e l’ho salvata. Questa funzionava senza errori:
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
L’ho presa da qui: Some common badge queries
Il trigger che ho scelto per questa era “Dopo che un post è stato elaborato” invece di “Quando un utente modifica o crea un post”. Se cambio il trigger in quest’ultimo, viene visualizzato un errore.
Ho cercato ulteriori informazioni sui diversi trigger e l’unico argomento che sono riuscito a trovare è qui: Creating triggered custom badge queries
Quasi tutte le mie query per i badge dipendono dal numero di post o risposte o dalla creazione di argomenti in una categoria specifica.
Sto cercando di capire qual è la differenza tra questi 3 trigger e quando sceglierli in base alla query:
- Dopo che un post è stato elaborato
- Quando un utente agisce su un post
- Quando un utente modifica o crea un post
Perché ho ricevuto un errore scegliendo il #3 come trigger, ma non quando ho scelto il #1?
Ho provato a creare un’altra query per un badge basata su questa:
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
dove ‘foo’ sarebbe lo slug della mia categoria. Questa volta, se lascio il trigger vuoto o scelgo “Aggiorna quotidianamente”, viene salvata senza errori. Se cambio il trigger in uno dei tre sopra (1-3), si verifica un errore.
Penso che sia perché la query SQL manca di informazioni su come attivarla in base a :post_ids? Se ho ragione, come potrei correggere la query sopra in modo che non sia giornaliera ma si attivi per ogni post nella categoria ‘foo’?
Qualsiasi spiegazione sarebbe apprezzata, oppure un riferimento a dove posso leggere di più sui trigger.