Badge-Abfrage funktioniert im Explorer, aber nicht in Badge SQL?

Ich habe die folgende Abfrage, die im Daten-Explorer funktioniert, aber ich erhalte die Fehlermeldung Sorry, an error has occurred., wenn ich versuche, die Abfrage zum Zuweisen von Abzeichen zu verwenden. Fehlt mir hier etwas? Die Abfrage sollte übereinstimmen, wenn jemand Mitglied einer Gruppe namens „chapter_“ oder „meta_chapter_“ ist und als primäre Gruppe zugewiesen ist.

SELECT distinct on (u.id)
u.id
FROM users u
INNER JOIN groups g
ON u.primary_group_id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
1 „Gefällt mir“

Bei den benutzerdefinierten Auslösern müssen Sie oben und unten eine zusätzliche Zeile hinzufügen. Es gibt ein Beispiel in einem meiner Beiträge oben, und Sie finden weitere Informationen unter Creating triggered custom badge queries :+1:

3 „Gefällt mir“

Danke! Ich denke, ich muss mir das nach einer guten Nachtruhe ansehen. SQL ist schon eine Weile her, und ich schätze, ich muss mir noch ein paar Beispiele und Dokumentationen ansehen. Das Folgende funktioniert definitiv nicht

SELECT ub.id, ub.granted_at, g.name
from user_badges ub
INNER JOIN groups g
ON ub.id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
AND (:backfill OR ub.id IN (:user_ids))

Es löst diesen Fehler aus, vielleicht übergebe ich falsche Informationen oder benenne Spalten falsch.

ERROR:  column q.user_id does not exist
LINE 11:  JOIN users u on u.id = q.user_id

Bearbeiten: Ah ja, user_id sollte irgendwoher verwendet werden, nicht id.


Und als Endergebnis werden diese Abzeichen zugewiesen, wenn man sich in einer Gruppe befindet, deren Name mit chapter_ oder meta_chapter beginnt.

SELECT distinct on (gu.user_id)
gu.user_id, gu.updated_at as granted_at
FROM group_users gu
INNER JOIN groups g
ON gu.group_id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
AND (:backfill OR gu.id IN (:user_ids))

Und dieses für den Fall, dass man sich in einer Gruppe befindet, deren Name mit -team endet.

SELECT distinct on (gu.user_id)
gu.user_id, gu.updated_at as granted_at
FROM group_users gu
INNER JOIN groups g
ON gu.group_id = g.id
WHERE g.name LIKE '%-team'
AND (:backfill OR gu.id IN (:user_ids))
1 „Gefällt mir“