Ceci est un bon exemple de quelques particularités des données Discourse qui peuvent vous aider à obtenir des résultats plus précis lors de la création de vos requêtes.
Comme la plupart des publications et des sujets sont “supprimés logiquement” lorsque vous les supprimez, cela signifie qu’ils apparaîtront toujours dans la base de données et pourront être inclus dans les statistiques de rapports personnalisés. Il peut donc être utile de les exclure de tous les résultats que vous pourriez vouloir extraire pour les statistiques d’utilisateurs ou de catégories, par exemple. De la même manière, vous pourriez également vouloir exclure les messages personnels de vos statistiques, ainsi que les utilisateurs système.
Voici quelques conseils pour les exclure :
Cette requête SQL est utilisée pour obtenir les 10 meilleurs utilisateurs (à l’exclusion des utilisateurs système) qui ont publié le plus de messages publics, en excluant tous les messages, ou les messages de sujets, qui ont été supprimés.
-- Sélectionne l'user_id de la table posts et compte le nombre de posts créés par chaque utilisateur
SELECT
p.user_id,
COUNT(p.id) AS "Nombre de posts"
FROM posts p
-- Jointure externe avec la table topics sur topic_id
LEFT JOIN topics t ON t.id = p.topic_id
WHERE
-- Exclut les sujets de messages privés
t.archetype <> 'private_message'
-- Exclut les sujets qui ont été supprimés
AND t.deleted_at ISNULL
-- Exclut les posts qui ont été supprimés
AND p.deleted_at ISNULL
-- Exclut les chuchotements, les petits messages d'action et les messages de modérateur
AND p.post_type = 1
-- Exclut les posts créés par l'utilisateur système et discobot (user_id 0 et -1)
AND p.user_id > 0
-- Groupe les résultats par user_id
GROUP BY 1
-- Ordonne les résultats par le nombre de posts en ordre décroissant
ORDER BY 2 DESC
-- Limite les résultats aux 10 meilleurs utilisateurs avec le plus de posts
LIMIT 10
Et voici la même requête sans les commentaires en ligne :
SELECT
p.user_id,
COUNT(p.id) AS "Nombre 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
Ceci est juste une requête simple pour démontrer les exemples, mais j’espère que cela vous aidera à démarrer avec l’explorateur de données.
Si vous avez des questions, n’hésitez pas à les poser ci-dessous. ![]()