これは投稿編集のためのダッシュボードレポートの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の2つのパラメータを受け入れます。両方の日付パラメータは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句には、post_revisionsテーブル (pr) とpostsテーブル (p) を結合するJOINステートメントが含まれています。結合は、post_revisions.post_idがposts.idと一致するという条件で行われ、リビジョンを元の投稿の詳細にリンクします。 - フィルター:
WHERE句はデータにいくつかのフィルターを適用します。pr.created_at BETWEEN :start_date AND :end_date: パラメータで指定された日付範囲内に作成された投稿リビジョンのみを含みます。pr.user_id > 0: 編集者が実際のユーザーであり、システム操作ではないことを保証します(user_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 |