Conseils courants sur les données Discourse

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. :+1: Si vous avez des questions, n’hésitez pas à les poser ci-dessous. :slight_smile:

10 « J'aime »

Vouliez-vous dire des messages ici ?

toute publication, ou publication de sujet […]

ça me semble bizarre.

Je ne pense pas ? Il est censé indiquer que les messages qui se trouvent dans des sujets supprimés ne sont pas inclus. L’utilisation de “messages” donne l’impression que cela fait référence aux MP. Mais je vais revoir comment décrire cela plus clairement. :+1:


Autre idée -

Inclure AND p.post_type = 1 pourrait également être une bonne inclusion pour celui-ci. :thinking:

1 « J'aime »

Je pensais que cela pourrait être parce qu’il filtre également les messages privés, et

exclut les messages, les publications supprimées et les publications de sujets supprimés.

Cela a plus de sens pour moi que

d’exclure les publications, ou les publications de sujets, qui ont été supprimées.

En le relisant maintenant, je vois quelle était l’intention initiale, donc c’est là, juste pas aussi clair que je m’y attendais, je suppose. :person_shrugging:

1 « J'aime »