대시보드 보고서 - 게시물 수정

Post Edits 대시보드 보고서의 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 절에는 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 절은 각 게시물 수정본이 수행된 타임스탬프 기준으로 가장 오래된 것부터 최신 순으로 결과를 정렬합니다.

결과 예시

날짜 게시물 편집자_사용자 작성자_사용자 수정_사유
2023-12-20 post_abc user1 user2 예시 수정 사유
2023-12-21 post_dfg user3 user4 예시 수정 사유
2023-12-24 post_xyz user5 user6 NULL
1개의 좋아요