Tenho um banco de dados SQL do Discourse. Preciso encontrar estatísticas de usuários para um carimbo de data/hora específico.
Por exemplo: preciso descobrir quantas postagens um usuário fez.
Se eu extrair esses dados de user_stats, ele fornecerá um número desde que o usuário se juntou ao fórum até agora, mas preciso obter isso para um período de tempo específico.
Alguma ideia?
Você precisará gerar as estatísticas você mesmo usando uma nova consulta ao banco de dados. Por exemplo, para obter a contagem de posts dos últimos 30 dias:
SELECT count(*) from posts
WHERE user_id=1
AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'
Este tópico tem muitas consultas de exemplo que você pode usar como ponto de partida:
Se eu executar SELECT count(*) from posts WHERE user_id=16 AND created_at > CURRENT_TIMESTAMP - INTERVAL '30 days'
Obtenho um número, mas ao verificar minhas estatísticas, o valor é menor que esse número.
Se você vir isso: obtive 430 do banco de dados, mas o valor real é 308?
A contagem exibida na interface do usuário refere-se apenas a posts públicos e não excluídos. A contagem do banco de dados inclui todos os posts, incluindo posts excluídos, mensagens privadas e categorias privadas.
SELECT count(*) FROM posts p
JOIN topics t ON t.id = p.topic_id
WHERE p.user_id=23968
AND p.deleted_at IS NULL
AND NOT COALESCE(p.hidden, 't')
AND p.post_type = 1
AND t.deleted_at IS NULL
AND COALESCE(t.visible, 't')
AND t.archetype <> 'private_message'
AND p.user_id > 0
AND p.post_number > 1