我一直在查看现有的徽章查询,以了解哪些查询针对 badge_posts 表中的帖子,或者使用其他方法来排除受保护类别中的帖子。
以下徽章查询会指定特定帖子,并且不会在私密类别中的活动授予:
- 编辑者
- 首次标记
- 首次点赞
- 首次链接
- 首次引用
- 首次分享
- 首次表情
- 首次提及
- 首次嵌入
- 首次通过电子邮件回复
- 读者
- 维基编辑者
- 优秀分享
- 良好分享
- 帮助台
- 不错分享
- 欢迎
- 著名链接
- 优秀回复
- 优秀主题
- 良好回复
- 良好主题
- 热门链接
- 不错回复
- 不错主题
- 流行链接
以下徽章不查询特定帖子,并且会在私密类别中的活动授予:
- 持照
- 自传作者
- 认证用户
- 本月新用户
- 阅读指南
- 受敬仰者
- 冠军
- 疯狂恋爱
- 忠实粉丝
- 富有同理心
- 鉴赏家
- 周年纪念
- 活动家
- 回馈者
- 更高之爱
- 受尊重者
- 被感激者
- 热情者
- 出于爱
- 推广者
- 感谢
- 领导者
- 常客
- 基础
- 会员
- 工作人员
- 个人资料图片
类似的内容已经由“被感激者”(20 个帖子各获得 1 个赞)和“受尊重者”(100 个帖子各获得 2 个赞)徽章覆盖。可以添加这些查询的一些变体。例如,20 个帖子各获得 10 个赞。还可以考虑授予“超级点赞主题”的徽章,其功能相当于“优秀主题”徽章。例如,当用户创建了 10 个各获得 10 个赞的主题时,可以授予该徽章。
我不确定为单个帖子或主题(不链接到该帖子)的活动授予徽章是否有意义。例如,可以创建一个替代的“首次点赞”徽章,其 SQL 如下:
SELECT pa1.user_id, pa1.created_at granted_at
FROM (
SELECT pa.user_id, min(pa.id) id
FROM post_actions pa
JOIN posts p on p.id = pa.post_id
WHERE post_action_type_id = 2
GROUP BY pa.user_id
) x
JOIN post_actions pa1 on pa1.id = x.id
为了使查询生效,需要使用“每日更新”触发器,而不是“当用户对帖子采取行动时”的查询。在徽章页面上,将显示已获得该徽章的用户及其获得徽章的时间,但不会提供授予该徽章的帖子链接:
这种思路对于主要拥有受保护类别的网站是否有意义?如果有意义,它可以用于复制当前针对 badge_posts 表的一些查询。
