因此,我正在创建一个自定义徽章查询。我已经成功创建并保存了一个。这个查询没有任何错误:
SELECT user_id, 0 post_id, current_timestamp granted_at
FROM badge_posts
WHERE (:backfill OR user_id IN (:user_ids) OR 0 NOT IN (:post_ids) )
GROUP BY user_id
HAVING count(*) > 499
我是从这里获取的:Some common badge queries
我为此选择的触发器是“帖子处理完成后”,而不是“当用户编辑或创建帖子时”。如果我将触发器更改为后者,将会出现错误。
我尝试查找有关不同触发器的更多信息,唯一找到的主题在这里:Creating triggered custom badge queries
我几乎所有的徽章查询都依赖于特定类别中的帖子数量、回复数量或主题创建数量。
我试图理解这三个触发器之间的区别,以及如何根据查询选择它们:
- 帖子处理完成后
- 当用户对帖子执行操作时
- 当用户编辑或创建帖子时
为什么选择 #3 作为触发器时会出错,而选择 #1 时却不会?
我尝试使用以下查询创建另一个徽章查询:
SELECT p.user_id, min(p.created_at) granted_at, MIN(p.id) post_id
FROM badge_posts p
JOIN topics t ON t.id = p.topic_id
WHERE category_id = (
SELECT id FROM categories WHERE name ilike 'foo'
) AND p.post_number = 1
GROUP BY p.user_id
其中 ‘foo’ 是我类别的 slug。这次,如果我将触发器留空或选择“每日更新”,它可以保存且没有任何错误。如果我将触发器更改为上述 1-3 中的任何一个,就会出现错误。
我认为这是因为 SQL 查询缺少如何基于 :post_ids 触发它的信息?如果我的理解正确,我该如何修复上述查询,使其不是每日更新,而是针对 foo 类别中的每个帖子触发?
任何解释或关于触发器的更多信息参考链接都将不胜感激。