Questo è un buon esempio di un paio di stranezze dei dati di Discourse che possono aiutarti a ottenere risultati più accurati quando crei le tue query.
Poiché la maggior parte dei post e degli argomenti vengono “eliminati in modo morbido” quando li elimini, ciò significa che appariranno ancora nel database e potranno essere inclusi nelle statistiche dei report personalizzati, quindi può essere utile filtrarli da qualsiasi risultato che potresti voler estrarre per le statistiche degli utenti o delle categorie, ad esempio. Allo stesso modo, potresti anche voler escludere i messaggi personali dalle tue statistiche, così come gli utenti di sistema.
Ecco un paio di suggerimenti su come filtrarli:
Questa query SQL viene utilizzata per ottenere i primi 10 utenti (esclusi gli utenti di sistema) che hanno effettuato il maggior numero di post pubblici, escludendo qualsiasi post, o post da argomenti, che sono stati eliminati.
-- Seleziona user_id dalla tabella posts e conta il numero di post effettuati da ciascun utente
SELECT
p.user_id,
COUNT(p.id) AS "Conteggio Post"
FROM posts p
-- Unisci a sinistra con la tabella topics in base a topic_id
LEFT JOIN topics t ON t.id = p.topic_id
WHERE
-- Escludi argomenti di messaggi privati
t.archetype <> 'private_message'
-- Escludi argomenti che sono stati eliminati
AND t.deleted_at ISNULL
-- Escludi post che sono stati eliminati
AND p.deleted_at ISNULL
-- Escludi sussurri, post di piccole azioni e post del moderatore
AND p.post_type = 1
-- Escludi post effettuati dall'utente di sistema e da discobot (user_id 0 e -1)
AND p.user_id > 0
-- Raggruppa i risultati per user_id
GROUP BY 1
-- Ordina i risultati per conteggio dei post in ordine decrescente
ORDER BY 2 DESC
-- Limita i risultati ai primi 10 utenti con il maggior numero di post
LIMIT 10
Ed ecco la stessa query senza i commenti inline:
SELECT
p.user_id,
COUNT(p.id) AS "Conteggio Post"
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
Questa è solo una semplice query per dimostrare gli esempi, ma speriamo che questo ti aiuti a iniziare con l’esploratore di dati.
Se hai domande, chiedi qui sotto. ![]()