Это 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, которые определяют диапазон дат для отчёта. Оба параметра даты принимают форматГГГГ-ММ-ДД.
- Запрос принимает два параметра:
- Выбор данных: Оператор
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: Гарантирует, что редактор — реальный пользователь, а не системная операция (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 | Пример причины правки |
| 2023-12-21 | post_dfg | user3 | user4 | Пример причины правки |
| 2023-12-24 | post_xyz | user5 | user6 | NULL |