Also, ich habe eine benutzerdefinierte Abfrage für Abzeichen erstellt. Eine habe ich bereits erfolgreich erstellt und gespeichert. Diese funktionierte ohne Fehler:
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
Ich habe sie von hier: Some common badge queries
Den Auslöser, den ich dafür gewählt habe, war „Nachdem ein Beitrag verarbeitet wurde" statt „Wenn ein Benutzer einen Beitrag bearbeitet oder erstellt". Wenn ich den Auslöser auf Letzteres ändere, erscheint ein Fehler.
Ich habe versucht, mehr Informationen zu den verschiedenen Auslösern zu finden, und das einzige Thema, das ich finden konnte, ist hier: Creating triggered custom badge queries
Fast alle meine Abzeichenabfragen hängen von der Anzahl der Beiträge oder Antworten oder der Erstellung von Themen in einer bestimmten Kategorie ab.
Ich versuche zu verstehen, was der Unterschied zwischen diesen drei Auslösern ist und wann man welchen basierend auf der Abfrage auswählt:
- Nachdem ein Beitrag verarbeitet wurde
- Wenn ein Benutzer einen Beitrag handelt
- Wenn ein Benutzer einen Beitrag bearbeitet oder erstellt
Warum habe ich einen Fehler erhalten, als ich #3 als Auslöser wählte, aber nicht bei #1?
Ich habe versucht, eine weitere Abzeichenabfrage mit dieser hier zu erstellen:
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
wobei „foo" der Slug meiner Kategorie wäre. Dieses Mal speichert es ohne Fehler, wenn ich den Auslöser leer lasse oder „Täglich aktualisieren" auswähle. Wenn ich den Auslöser auf eine der Optionen 1–3 ändere, tritt ein Fehler auf.
Ich denke, das liegt daran, dass der SQL-Abfrage Informationen fehlen, wie sie basierend auf :post_ids ausgelöst werden soll? Wenn ich recht habe, wie könnte ich die obige Abfrage so anpassen, dass sie nicht täglich ist, sondern bei jedem Beitrag in der Kategorie „foo" ausgelöst wird?
Jede Erklärung wäre willkommen oder ein Hinweis darauf, wo ich mehr über Auslöser lesen kann.