J’aimerais pouvoir obtenir la liste de tous les tags ainsi que le nombre de nouveaux sujets/messages créés pour chacun au cours d’une période donnée (par exemple le mois dernier).
Quelqu’un peut-il m’aider avec cette requête ?
Vous pourriez parcourir les fichiers, je suppose, mais à mon avis, il est plus efficace d’utiliser le menu de la page d’administration des plugins. Vous devriez pouvoir voir de nombreuses tables qui, une fois sélectionnées, affichent les noms des champs et les informations du schéma.
Je ne suis pas à mon bureau, mais le modèle contient :
# == Schema Information
#
# Table name: topic_tags
#
# id :integer not null, primary key
# topic_id :integer not null
# tag_id :integer not null
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_topic_tags_on_topic_id_and_tag_id (topic_id,tag_id) UNIQUE
Remarquez les « topic_id » et « tag_id » ; cela suggère que les noms suivent le format « nom de la table, tiret bas, nom du champ ».
La table tags contient :
# == Schema Information
#
# Table name: tags
#
# id :integer not null, primary key
# name :string not null
# topic_count :integer default(0), not null
# created_at :datetime not null
# updated_at :datetime not null
# pm_topic_count :integer default(0), not null
# target_tag_id :integer
#
# Indexes
#
# index_tags_on_lower_name (lower((name)::text)) UNIQUE
# index_tags_on_name (name) UNIQUE
Je vous laisse examiner les champs de la table topic.
Mais cela va probablement trop loin pour l’instant. Avez-vous pu exécuter une requête très simple sur l’une de ces tables, un peu comme un « Bonjour Explorateur de Données » ? Laquelle est-ce ?
Super, merci beaucoup pour les conseils. J’ai réussi à le compiler. Ce n’est peut-être pas parfait, mais si cela peut être utile à d’autres :
Nouveaux sujets par 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