我刚刚将此标记为 sql-triggered-badge,但我想确认您是在寻找自动徽章还是手动徽章?我假设您可能没有很多版主,并且可以根据数据浏览器查询手动授予此徽章?
我认为上面简化版本可以这样写:
-- [params]
-- int :years
WITH time_in_mod_group AS (
SELECT
user_id,
(CURRENT_DATE - created_at::date) AS days_as_mod
FROM group_users
WHERE group_id = 2 -- 'moderator' group 的 group id
AND user_id > 0 -- 排除系统用户和机器人
)
SELECT
user_id,
days_as_mod
FROM time_in_mod_group
WHERE days_as_mod > (365 * :years)
这可以作为一个数据浏览器查询而不是一组 SQL 徽章来使用,并且可以选出符合条件的用户名列表,以便您手动授予他们徽章。
有一个注意事项是,如果他们中途离开版主组然后重新加入,它将只计算最新的加入时间。我认为可以使用 user_histories 表来解决这个问题,但如果这是一个例外情况,那么手动处理可能更容易。