Este es un buen ejemplo de un par de peculiaridades de los datos de Discourse que pueden ayudarte a obtener resultados más precisos al crear tus consultas.
Como la mayoría de las publicaciones y temas se ‘eliminan de forma lógica’ cuando los eliminas, esto significa que aún aparecerán en la base de datos y pueden incluirse en las estadísticas de informes personalizados, por lo que puede ser útil filtrarlos de cualquier resultado que desees extraer para estadísticas de usuarios o categorías, por ejemplo. De manera similar, también es posible que desees excluir los Mensajes Personales de tus estadísticas, así como los usuarios del sistema.
Aquí tienes un par de consejos sobre cómo filtrarlos:
Esta consulta SQL se utiliza para obtener los 10 usuarios principales (excluyendo a los usuarios del sistema) que han realizado la mayor cantidad de publicaciones públicas, excluyendo cualquier publicación, o publicaciones de temas, que hayan sido eliminadas.
-- Seleccionando user_id de la tabla posts y contando el número de posts que ha hecho cada usuario
SELECT
p.user_id,
COUNT(p.id) AS "Número de Posts"
FROM posts p
-- Unión izquierda con la tabla topics por topic_id
LEFT JOIN topics t ON t.id = p.topic_id
WHERE
-- Excluir temas de mensajes privados
t.archetype <> 'private_message'
-- Excluir temas que han sido eliminados
AND t.deleted_at ISNULL
-- Excluir posts que han sido eliminados
AND p.deleted_at ISNULL
-- Excluir susurros, posts de acciones pequeñas y posts de moderadores
AND p.post_type = 1
-- Excluir posts hechos por el usuario del sistema y discobot (user_id 0 y -1)
AND p.user_id > 0
-- Agrupar los resultados por user_id
GROUP BY 1
-- Ordenar los resultados por el recuento de posts en orden descendente
ORDER BY 2 DESC
-- Limitar los resultados a los 10 usuarios principales con más posts
LIMIT 10
Y aquí está sin los comentarios en línea:
SELECT
p.user_id,
COUNT(p.id) AS "Número de Posts"
FROM posts p
LEFT JOIN topics t ON t.id = p.topic_id
WHERE t.archetype <> 'private_message'
AND t.deleted_at ISNULL
AND p.deleted_at ISNULL
AND p.post_type = 1
AND p.user_id > 0
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10
Esta es solo una consulta simple para demostrar los ejemplos, pero espero que esto te ayude a empezar con el explorador de datos.
Si tienes alguna pregunta, por favor, hazla a continuación. ![]()