Badge 查询在 Explorer 中可以运行,但在 Badge 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

编辑:啊是的,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 个赞