每次在某个类别中发新主题时的徽章查询?

我有一个徽章,我的会员可以多次获得,它是一个“读书俱乐部”徽章 - 他们因讨论月度书籍而获得该徽章。

每个月,都会围绕下一本书创建一个新主题,所有回复的人都应该获得该徽章 - 目前这是手动完成的,非常麻烦。

我想知道是否有人可以帮助我创建一个徽章 SQL 来解决这个问题。

用户应该在每个主题中最多获得一个徽章,这是他们第一次在该主题中发帖。每次获得的都是同一个徽章,可以多次获得。

这可能吗?谢谢!

2 个赞

有人能帮帮我吗?或者有关于如何制作 Badge SQL 的指南吗?

您是否阅读了 https://meta.discourse.org/tag/sql-triggered-badge?

是的,我都看过了。

直接尝试操作有点吓人,因为一个格式错误的 SQL 查询可能会在生产环境中导致非常糟糕的后果。

有测试模式或类似的东西吗?

我使用暂存服务器进行实验。

你在这方面有进一步的进展吗?

读书俱乐部的主题是如何定义的?它们是单独的类别,还是按标签分组?

再说不下去了。我被多个授予因素难住了。

所有主题都在同一类别中。该类别已锁定,因此只有工作人员才能在那里发帖,因此可以自动授予该类别中的任何回复。

但我希望它:

  • 为每个人在每个主题中的第一个回复授予徽章,但每个主题仅一次
  • 用户每次回复同一类别中的不同主题时,都可以获得多个相同的徽章

我认为类似这样的东西可以做到:

WITH book_club_first_posts AS (

SELECT 
    p.topic_id,
    p.user_id,
    MIN(p.id) AS post_id
FROM posts p
  JOIN topics t ON t.id = p.topic_id
WHERE t.category_id = 5  -- replace with the category_id of your book club
    AND p.deleted_at ISNULL
    AND t.deleted_at ISNULL
    AND p.post_type = 1
    AND p.post_number <> 1
    AND p.user_id > 0
GROUP BY p.topic_id, p.user_id

)

SELECT bcfp.user_id, bcfp.post_id, p.created_at granted_at
FROM book_club_first_posts bcfp
  JOIN posts p ON p.id = bcfp.post_id
WHERE (:backfill OR p.id IN (:post_ids))

1 个赞

我很快就会尝试,谢谢。

1 个赞

太棒了,谢谢!!

1 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.