Explorerでは動作するが、バッジ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_%'
「いいね!」 1

カスタムトリガーの場合は、最初と最後に余分な行を追加する必要があります。私の投稿に例があり、Creating triggered custom badge queries で詳細を確認できます :+1:

「いいね!」 3

ありがとうございます。よく眠った後に確認する必要があると思います。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

編集:ああ、そうです。「id」ではなく、「user_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))
「いいね!」 1