创建自定义徽章和触发器

因此,我正在创建一个自定义徽章查询。我已经成功创建并保存了一个。这个查询没有任何错误:

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

我几乎所有的徽章查询都依赖于特定类别中的帖子数量、回复数量或主题创建数量。

我试图理解这三个触发器之间的区别,以及如何根据查询选择它们:

  1. 帖子处理完成后
  2. 当用户对帖子执行操作时
  3. 当用户编辑或创建帖子时

为什么选择 #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 类别中的每个帖子触发?

任何解释或关于触发器的更多信息参考链接都将不胜感激。

4 个赞