我在下面有一个查询,它可以在数据浏览器中运行,但在尝试使用该查询分配徽章时收到错误消息“抱歉,发生了一个错误。” 我是不是遗漏了什么?查询应匹配某人是否是名为“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 找到更多信息 
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
编辑:啊是的,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))
1 个赞