仪表板报告 - 帖子编辑

这是帖子编辑仪表板报告的 SQL 版本。

此仪表板报告显示在特定日期范围内被编辑的帖子,并包含有关编辑者、帖子作者以及帖子被编辑原因的信息。此报告旨在帮助管理员监控和了解其论坛内发生的编辑活动,特别关注非原始作者的用户编辑帖子的案例。

-- [params]
-- date :start_date = 2023-12-16
-- date :end_date = 2024-01-16

SELECT
    pr.created_at::date as day,
    pr.post_id as post_id,
    pr.user_id AS editor_user_id,
    p.user_id AS author_user_id,
    p.edit_reason
FROM post_revisions pr
JOIN posts p ON p.id = pr.post_id
WHERE pr.created_at BETWEEN :start_date AND :end_date
AND pr.user_id > 0
AND pr.user_id <> p.user_id
ORDER BY pr.created_at ASC

SQL 查询说明

  • 参数声明:
    • 查询接受两个参数 :start_date:end_date,它们定义了报告的日期范围。两个日期参数都接受 YYYY-MM-DD 格式的日期。
  • 数据选择: SELECT 语句指定了最终报告中将显示的列。这些列包括:
    • pr.created_at::date as day: 帖子修订创建的日期,并将其转换为 date 类型以移除时间部分。
    • pr.post_id: 被编辑帖子的 ID。
    • pr.user_id AS editor_user_id: 进行编辑的用户的 ID。此列别名为 editor_user_id,以区别于原始帖子的作者。
    • p.user_id AS author_user_id: 原始帖子作者的用户的 ID,别名为 author_user_id
    • p.edit_reason: 提供编辑原因(如果有)。
  • 连接表: FROM 子句包含一个 JOIN 语句,该语句将 post_revisions 表 (pr) 与 posts 表 (p) 合并。连接基于 post_revisions.post_id 匹配 posts.id 的条件,从而将修订与原始帖子详细信息关联起来。
  • 筛选器: WHERE 子句对数据应用了几个筛选器:
    • pr.created_at BETWEEN :start_date AND :end_date: 仅包括在参数指定的日期范围内的帖子修订。
    • pr.user_id > 0: 确保编辑者是实际用户而不是系统操作(用户 ID 为 0 通常表示系统操作)。
    • pr.user_id <> p.user_id: 过滤掉由帖子原始作者进行的修订,仅关注由不同用户进行的编辑。
  • 排序结果: ORDER BY pr.created_at ASC 子句根据每个帖子修订创建的时间戳,按从旧到新的顺序对结果进行排序。

示例结果

day post editor_user author_user edit_reason
2023-12-20 post_abc user1 user2 Example Edit Reason
2023-12-21 post_dfg user3 user4 Example Edit Reason
2023-12-24 post_xyz user5 user6 NULL
1 个赞