Questa è una versione SQL del report della dashboard per le modifiche ai post.
Questo report della dashboard mostra i post modificati in un intervallo di date specifico e include informazioni sull’editor, sull’autore del post e sul motivo per cui il post è stato modificato. Questo report è progettato per aiutare gli amministratori a monitorare e comprendere l’attività di modifica in corso nei loro forum, concentrandosi in particolare sui casi in cui utenti diversi dagli autori originali apportano modifiche ai post.
-- [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
Spiegazione della query SQL
- Dichiarazione dei parametri:
- La query accetta due parametri,
:start_datee:end_date, che definiscono l’intervallo di date per il report. Entrambi i parametri di data accettano il formato dataAAAA-MM-GG.
- La query accetta due parametri,
- Selezione dei dati: L’istruzione
SELECTspecifica le colonne che appariranno nel report finale. Queste includono:pr.created_at::date as day: La data in cui è stata creata una revisione del post, e viene convertita in tipodateper rimuovere la parte dell’ora.pr.post_id: L’ID del post che è stato modificato.pr.user_id AS editor_user_id: L’ID dell’utente che ha apportato la modifica. Viene rinominato comeeditor_user_idper distinguerlo dall’autore del post originale.p.user_id AS author_user_id: L’ID dell’utente che ha creato il post originale, rinominato comeauthor_user_id.p.edit_reason: Il motivo fornito per la modifica, se presente.
- Unione delle tabelle: La clausola
FROMinclude un’istruzioneJOINche combina la tabellapost_revisions(pr) con la tabellaposts(p). L’unione viene eseguita sulla condizione chepost_revisions.post_idcorrisponda aposts.id, collegando così una revisione ai dettagli del post originale. - Filtri: La clausola
WHEREapplica diversi filtri ai dati:pr.created_at BETWEEN :start_date AND :end_date: Include solo le revisioni dei post create nell’intervallo di date specificato dai parametri.pr.user_id > 0: Assicura che l’editor sia un utente effettivo e non un’operazione di sistema (unuser_iddi 0 indica solitamente un’operazione di sistema).pr.user_id <> p.user_id: Filtra le revisioni apportate dall’autore originale del post, concentrandosi solo sulle modifiche apportate da utenti diversi.
- Ordinamento dei risultati: La clausola
ORDER BY pr.created_at ASCordina i risultati dal più vecchio al più recente in base al timestamp di quando è stata effettuata ciascuna revisione del post.
Risultati di esempio
| giorno | post | editor_utente | autore_utente | motivo_modifica |
|---|---|---|---|---|
| 2023-12-20 | post_abc | user1 | user2 | Motivo di esempio per la modifica |
| 2023-12-21 | post_dfg | user3 | user4 | Motivo di esempio per la modifica |
| 2023-12-24 | post_xyz | user5 | user6 | NULL |