Gostaria de poder obter uma lista de todas as tags e quantos novos tópicos/postagens foram criados para cada uma em um determinado período (digamos, no último mês). Alguém pode ajudar com a consulta?
Você poderia examinar os arquivos, suponho, mas, na minha opinião, é mais eficiente usar o menu na página de administração de plugins. Você deve ser capaz de ver várias tabelas que, ao serem selecionadas, exibem os nomes dos campos e informações do esquema.
Não estou no meu computador, mas o modelo contém:
# == Informações do Esquema
#
# Nome da tabela: topic_tags
#
# id :integer não nulo, chave primária
# topic_id :integer não nulo
# tag_id :integer não nulo
# created_at :datetime não nulo
# updated_at :datetime não nulo
#
# Índices
#
# index_topic_tags_on_topic_id_and_tag_id (topic_id,tag_id) UNIQUE
Observe o “topic_id” e o “tag_id”; isso sugere que os nomes seguem o padrão “nome da tabela, sublinhado, nome do campo”.
A tabela de tags possui:
# == Informações do Esquema
#
# Nome da tabela: tags
#
# id :integer não nulo, chave primária
# name :string não nulo
# topic_count :integer padrão(0), não nulo
# created_at :datetime não nulo
# updated_at :datetime não nulo
# pm_topic_count :integer padrão(0), não nulo
# target_tag_id :integer
#
# Índices
#
# index_tags_on_lower_name (lower((name)::text)) UNIQUE
# index_tags_on_name (name) UNIQUE
E deixarei com você a tarefa de examinar os campos das tabelas de tópicos.
Mas isso provavelmente está adiantando as coisas. Você conseguiu executar uma consulta muito simples em uma dessas tabelas, como uma espécie de “Olá, Explorador de Dados”? Qual foi?
Show, muito obrigado pelas dicas.
Consegui compilá-lo. Pode não ser perfeito, mas se alguém mais achar útil:
Novos tópicos por tag
-- [params]
-- int :months_ago = 0
WITH query_period as (
SELECT
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' as period_start,
date_trunc('month', CURRENT_DATE) - INTERVAL ':months_ago months' + INTERVAL '1 month' - INTERVAL '1 second' as period_end
)
SELECT
tags.name,
count(1) as topic_count
FROM topics t
RIGHT JOIN topic_tags tt
ON t.id = tt.topic_id
RIGHT JOIN tags tags
ON tt.tag_id = tags.id
RIGHT JOIN query_period qp
ON t.created_at >= qp.period_start
AND t.created_at <= qp.period_end
WHERE t.user_id > 0
AND tt.topic_id IS NOT NULL
GROUP BY tags.name
ORDER BY topic_count DESC