Consigli comuni sui dati di Discourse

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. :+1: Se hai domande, chiedi qui sotto. :slight_smile:

10 Mi Piace

Intendevi messaggi qui?

qualsiasi post, o post da […]

mi sembra strano.

Non credo? Dovrebbe indicare che i post che si trovano in argomenti eliminati non sono inclusi. Usare messaggi fa sembrare che si riferisca ai messaggi privati. Ma darò un’altra occhiata a come descriverlo più chiaramente. :+1:


Un altro pensiero -

Includere AND p.post_type = 1 potrebbe essere una buona aggiunta anche per questo. :thinking:

1 Mi Piace

Pensavo potesse essere perché filtra anche i PM e

esclude messaggi, post cancellati e post da argomenti cancellati.

Ha più senso per me di

escludere post o post da argomenti che sono stati cancellati.

Rileggendolo ora, capisco quale fosse l’intenzione originale, quindi c’è, solo che non è così chiaro come mi aspettavo, suppongo. :person_shrugging:

1 Mi Piace