Esta es una versión SQL del Informe del Panel para Temas.
Este informe proporciona un recuento de los temas nuevos creados diariamente dentro de un rango de fechas especificado. El informe no incluye mensajes personales, solo temas regulares que son visibles en el foro.
--[params]
-- date :start_date
-- date :end_date
SELECT
p.created_at::date as day,
COUNT(p.id) AS topics_created
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
AND p.post_number = 1
AND p.user_id > 0
AND p.deleted_at ISNULL
AND t.archetype = 'regular'
GROUP BY p.created_at::date
ORDER BY p.created_at::date ASC
Explicación de la consulta SQL
La consulta SQL realiza las siguientes acciones:
- Definición de parámetros: Acepta dos parámetros,
:start_datey:end_date, que definen el rango de fechas para el informe. Ambos parámetros de fecha aceptan el formatoYYYY-MM-DD. - Selección de datos: La consulta selecciona la fecha de creación de las publicaciones (
p.created_at) y el recuento de los ID de las publicaciones (COUNT(p.id)) comotopics_created. - Uniones: Une la tabla
postscon la tablatopicsen sus respectivos camposid, asegurando que solo se consideren los temas no eliminados (t.deleted_at ISNULL). - Filtros: La consulta filtra las publicaciones para incluir solo aquellas que:
- Fueron creadas dentro del rango de fechas especificado (
p.created_at::date BETWEEN :start_date AND :end_date). - Son la primera publicación en un tema (
p.post_number = 1), lo que indica el inicio de un nuevo tema. - Fueron creadas por usuarios registrados (
p.user_id > 0), excluyendo las publicaciones del sistema. - No han sido eliminadas (
p.deleted_at ISNULL). - Pertenecen a temas del arquetipo ‘regular’ (
t.archetype = 'regular'), excluyendo mensajes personales.
- Fueron creadas dentro del rango de fechas especificado (
- Agrupación: Los resultados se agrupan por la fecha de creación de las publicaciones (
p.created_at::date). - Ordenación: La salida final se ordena por la fecha de creación en orden ascendente (
ORDER BY p.created_at::date ASC), proporcionando una vista cronológica de la creación de nuevos temas.
Resultados de ejemplo
| day | topics_created |
|---|---|
| 2023-11-11 | 18 |
| 2023-11-12 | 10 |
| 2023-11-13 | 21 |
| 2023-11-14 | 19 |
| 2023-11-15 | 22 |
| … | … |