我们的社区以置顶和全局置顶的主题为核心。不幸的是,用户个人资料页面完全没有相关的统计数据,而且似乎置顶/全局置顶信息在数据库中也未被系统地存储。
鉴于此,我正在寻找一种方法,至少可以为“首次置顶”、“10 次置顶”、“100 次置顶”以及“全局置顶主题”授予徽章。
请问有人能帮我提供实现这些徽章的 SQL 语句吗?
我的起点如下:
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 t.unpinned IS NOT NULL
GROUP BY p.user_id
HAVING count(*) > 5
但这返回了错误:
ERROR: column t.unpinned does not exist
LINE 6: WHERE t.unpinned IS NOT NULL
我想我只能使用 unpinned 字段,因为据我所知,没有其他数据点能记录主题曾经被置顶过。或者,我是否可以使用 post_actions?
或者,是否可以通过搜索主题中由工作人员/系统用户发布的、包含“pinned … ago”的第一条帖子来统计?action_code => pinned.disabled
更新:这似乎能运行了……
SELECT t.user_id, current_timestamp granted_at
FROM badge_posts p
INNER JOIN topics t on t.id = p.topic_id
WHERE p.action_code ilike 'pinned.disabled'
GROUP BY t.user_id
HAVING count(*) > 0
但我不确定这是否是最佳方案。由于一个帖子可能被多次置顶和取消置顶……我不确定这个查询是否每个 topic.id 只会捕获到一个 pinned.disabled 记录。
如果有徽章 SQL 高手能提供帮助,将不胜感激。
另外,是否可以考虑在数据库中像存储“点赞”一样系统地存储置顶信息,并在用户个人资料的“统计”部分及下方显示,并附带“已置顶”链接?因为主题被置顶所代表的认可度远高于点赞,理应被纳入统计。
