这展示了几个 Discourse 数据怪癖的良好示例,它们可以帮助您在构建查询时获得更准确的结果。
由于大多数帖子和主题在删除时会被“软删除”,这意味着它们仍会出现在数据库中,并可包含在自定义报告统计信息中,因此,例如,在您可能要为用户或类别统计信息提取的任何结果中过滤掉它们会很有帮助。同样,您可能还希望从统计信息中排除个人消息以及系统用户。
以下是一些过滤掉这些信息的技巧:
此 SQL 查询用于获取(排除系统用户)发布公共帖子最多的前 10 名用户,并排除已删除的任何帖子或来自已删除主题的帖子。
-- 从 posts 表中选择 user_id 并计算每个用户发布的帖子数量
SELECT
p.user_id,
COUNT(p.id) AS "Post Count"
FROM posts p
-- 在 topic_id 上与 topics 表进行左连接
LEFT JOIN topics t ON t.id = p.topic_id
WHERE
-- 排除私人消息主题
t.archetype <> 'private_message'
-- 排除已删除的主题
AND t.deleted_at ISNULL
-- 排除已删除的帖子
AND p.deleted_at ISNULL
-- 排除低语、小型操作帖子和版主帖子
AND p.post_type = 1
-- 排除系统用户和 discobot(user_id 0 和 -1)发布的帖子
AND p.user_id > 0
-- 按 user_id 对结果进行分组
GROUP BY 1
-- 按帖子数量降序对结果进行排序
ORDER BY 2 DESC
-- 将结果限制为帖子最多的前 10 名用户
LIMIT 10
这是没有内联注释的版本:
SELECT
p.user_id,
COUNT(p.id) AS "Post Count"
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE t.archetype <> 'private_message'
AND t.deleted_at ISNULL
AND p.deleted_at ISNULL
AND p.post_type = 1
AND p.user_id > 0
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10
这只是一个简单的查询,用于演示示例,但希望这能帮助您开始使用数据浏览器。
如果您有任何问题,请在下方提问。![]()