عدد المواضيع لكل وسم

أود الحصول على قائمة بجميع الوسوم وعدد الموضوعات/المنشورات الجديدة التي تم إنشاؤها لكل منها خلال فترة معينة (مثل الشهر الماضي). هل يمكن لأي شخص مساعدتي في صياغة الاستعلام؟

يمكنك بالتأكيد تفحّص الملفات، ولكن في رأيي الشخصي، من الأكثر كفاءة استخدام القائمة الموجودة في صفحة إدارة الإضافات. يجب أن تتمكن من رؤية العديد من الجداول التي، عند تحديدها، تعرض أسماء الحقول ومعلومات المخطط.

لستُ على سطح المكتب الآن، لكن النموذج يحتوي على:

# == 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 

لاحظ “topic_id” و “tag_id”؛ فهي توحي بأن الأسماء تتبع النمط “اسم الجدول، شرطة سفلية، اسم الحقل”.

أما جدول الوسوم (tags) فيحتوي على:

# == 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

وسأترك لك مهمة فحص حقول جداول المواضيع.

ولكن ربما هذا يتقدّم على الأمور. هل تمكّنت من تنفيذ استعلام بسيط جدًا على أحد هذه الجداول كنوع من “مرحبًا أيها مستكشف البيانات”؟ وما هو؟

رائع، شكرًا جزيلاً على التلميحات.
تمكنت من بنائه. قد لا يكون مثاليًا، لكن إذا وجد أي شخص آخر أنه مفيد:

مواضيع جديدة لكل وسم

-- [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