Запрос на получение бейджа работает в обозревателе, но не в SQL для бейджей?

У меня есть следующий запрос, который работает в исследовании данных, но при попытке использовать его для назначения бейджей возникает ошибка «Извините, произошла ошибка». Не упустил ли я что-то? Запрос должен срабатывать, если пользователь является участником группы с именем «chapter_» или «meta_chapter_» и эта группа назначена ему как основная.

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_%'

Для пользовательских триггерных наград вам нужно добавить дополнительную строку в начале и в конце. Пример есть в моём сообщении выше, а дополнительную информацию можно найти по ссылке: Creating triggered custom badge queries :+1:

Спасибо! Думаю, мне стоит взглянуть на это после хорошего ночного сна. SQL я не использовал уже давно, так что, наверное, нужно пересмотреть ещё несколько примеров и документации. То, что ниже, точно не работает.

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

Это вызывает ошибку, возможно, я передаю неверную информацию или неправильно указываю имя/колонку.

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

Редактирование: а, да, user_id нужно брать откуда-то ещё, а не использовать id.


Итак, в итоге эти бейджи назначаются, если пользователь состоит в группе, название которой начинается с chapter_ или meta_chapter.

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

А этот запрос — для случаев, когда пользователь состоит в группе, название которой заканчивается на -team.

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