Dicas de dados comuns para Discourse

Este é um bom exemplo de algumas peculiaridades dos dados do Discourse que podem ajudá-lo a obter resultados mais precisos ao criar suas consultas.

Como a maioria das postagens e tópicos são ‘excluídos logicamente’ quando você os exclui, isso significa que eles ainda aparecerão no banco de dados e podem ser incluídos em estatísticas de relatórios personalizados, portanto, pode ajudar a filtrá-los de quaisquer resultados que você possa querer extrair para estatísticas de usuários ou categorias, por exemplo. De forma semelhante, você também pode querer excluir Mensagens Pessoais de suas estatísticas, bem como os usuários do sistema.

Aqui estão algumas dicas sobre como filtrá-los:

Esta consulta SQL é usada para obter os 10 principais usuários (excluindo usuários do sistema) que fizeram mais postagens públicas, excluindo quaisquer postagens, ou postagens de tópicos, que foram excluídas.

-- Selecionando user_id da tabela posts e contando o número de posts feitos por cada usuário
SELECT 
    p.user_id,
    COUNT(p.id) AS "Contagem de Posts"
FROM posts p
  -- Junção à esquerda com a tabela topics no topic_id
  LEFT JOIN topics t ON t.id = p.topic_id
WHERE 
  -- Excluir tópicos de mensagens privadas
  t.archetype <> 'private_message'
  -- Excluir tópicos que foram excluídos
  AND t.deleted_at ISNULL
  -- Excluir posts que foram excluídos
  AND p.deleted_at ISNULL
  -- Excluir sussurros, posts de ações pequenas e posts de moderadores
  AND p.post_type = 1
  -- Excluir posts feitos pelo usuário do sistema e discobot (user_id 0 e -1)
  AND p.user_id > 0
-- Agrupar os resultados por user_id 
GROUP BY 1
-- Ordenar os resultados pela contagem de posts em ordem decrescente 
ORDER BY 2 DESC
-- Limitar os resultados aos 10 principais usuários com mais posts
LIMIT 10

E aqui está sem os comentários inline:

SELECT 
    p.user_id,
    COUNT(p.id) AS "Contagem 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 é apenas uma consulta simples para demonstrar os exemplos, mas espero que isso ajude você a começar com o explorador de dados. :+1: Se você tiver alguma dúvida, por favor, pergunte abaixo. :slight_smile:

10 curtidas

Você quis dizer mensagens aqui?

qualquer post, ou posts de[…]

soa estranho para mim.

Eu acho que não? A intenção é transmitir que posts em tópicos excluídos não estão incluídos. Usar “mensagens” faz parecer que se refere a mensagens privadas. Mas darei outra olhada em como descrever isso com mais clareza. :+1:


Outro pensamento -

Incluir AND p.post_type = 1 pode ser uma boa inclusão para este também. :thinking:

1 curtida

Pensei que poderia ser porque ele também filtra PMs e

exclui quaisquer mensagens, posts excluídos e posts de tópicos excluídos.

Faz mais sentido para mim do que

excluir quaisquer posts, ou posts de tópicos, que foram excluídos.

Relendo agora, eu vejo qual era a intenção original, então está lá, apenas não tão claro quanto eu esperava, eu suponho. :person_shrugging:

1 curtida