Esta é uma versão SQL do Relatório de Painel para Edições de Postagens.
Este relatório de painel mostra postagens que foram editadas em um intervalo de datas específico e inclui informações sobre o editor, o autor da postagem e o motivo pelo qual a postagem foi editada. Este relatório foi projetado para ajudar os administradores a monitorar e entender a atividade de edição que ocorre em seus fóruns, com foco particular em casos em que usuários que não sejam os autores originais fazem edições em postagens.
-- [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
Explicação da Consulta SQL
- Declaração de Parâmetros:
- A consulta aceita dois parâmetros,
:start_datee:end_date, que definem o intervalo de datas para o relatório. Ambos os parâmetros de data aceitam o formato de dataAAAA-MM-DD.
- A consulta aceita dois parâmetros,
- Seleção de Dados: A instrução
SELECTespecifica as colunas que aparecerão no relatório final. Estas incluem:pr.created_at::date as day: A data em que uma revisão de postagem foi criada, e é convertida para o tipodatepara remover a parte do tempo.pr.post_id: O ID da postagem que foi editada.pr.user_id AS editor_user_id: O ID do usuário que fez a edição. Este é apelidado deeditor_user_idpara diferenciá-lo do autor da postagem original.p.user_id AS author_user_id: O ID do usuário que escreveu a postagem original, apelidado deauthor_user_id.p.edit_reason: O motivo fornecido para a edição, se algum foi dado.
- Junção de Tabelas: A cláusula
FROMinclui uma instruçãoJOINque combina a tabelapost_revisions(pr) com a tabelaposts(p). A junção é feita na condição de quepost_revisions.post_idcorresponda aposts.id, ligando assim uma revisão aos detalhes da postagem original. - Filtros: A cláusula
WHEREaplica vários filtros aos dados:pr.created_at BETWEEN :start_date AND :end_date: Inclui apenas revisões de postagens criadas dentro do intervalo de datas especificado pelos parâmetros.pr.user_id > 0: Garante que o editor seja um usuário real e não uma operação do sistema (umuser_idde 0 geralmente indica uma operação do sistema).pr.user_id <> p.user_id: Filtra revisões feitas pelo autor original da postagem, focando apenas em edições feitas por usuários diferentes.
- Ordenação de Resultados: A cláusula
ORDER BY pr.created_at ASCordena os resultados do mais antigo para o mais recente com base no carimbo de data/hora de quando cada revisão de postagem foi feita.
Resultados de Exemplo
| dia | 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 |