Dashboard-Bericht - Thema-Ansicht-Statistiken

Dies ist eine SQL-Version des Dashboard-Berichts für Topic View Stats.

Dieser Bericht sammelt und aggregiert Statistiken zur Themenansicht, einschließlich anonymer und angemeldeter Aufrufe, innerhalb eines bestimmten Datumsbereichs. Er ermöglicht auch die Filterung nach Kategorien und schließt optional Unterkategorien ein.

:discourse: Diese Abfrage und die Datenbanktabelle topic_view_stats wurden im Mai 2024 zu Discourse hinzugefügt und zeigen keine Daten vor diesem Zeitpunkt an.

-- [params]
-- date :start_date
-- date :end_date
-- int :category_id = 0
-- boolean :include_subcategories = false

WITH category_filter AS (
  SELECT
    id
  FROM categories
  WHERE
    (:category_id = 0 OR id = :category_id)
    OR (:include_subcategories AND parent_category_id = :category_id)
)

SELECT
  topic_view_stats.topic_id,
  topics.title AS topic_title,
  SUM(topic_view_stats.anonymous_views) AS total_anonymous_views,
  SUM(topic_view_stats.logged_in_views) AS total_logged_in_views,
  SUM(topic_view_stats.anonymous_views + topic_view_stats.logged_in_views) AS total_views
FROM topic_view_stats
INNER JOIN topics ON topics.id = topic_view_stats.topic_id
WHERE
  topic_view_stats.viewed_at BETWEEN :start_date AND :end_date
  AND (
    :category_id = 0
    OR topics.category_id IN (SELECT id FROM category_filter)
  )
GROUP BY topic_view_stats.topic_id, topics.title
ORDER BY total_views DESC
LIMIT 100

Erklärung der SQL-Abfrage

Parameter

  • :start_date (Datum): Das Anfangsdatum des Bereichs für die Analyse (einschließlich).
  • :end_date (Datum): Das Enddatum des Bereichs für die Analyse (einschließlich).
  • :category_id (Integer, optional): Themen nach Kategorie filtern. Verwenden Sie:
    • 0 für alle Kategorien.
    • Eine beliebige spezifische Kategorie-ID zur Filterung nach dieser Kategorie.
  • :include_subcategories (Boolean, optional): Wählen Sie aus, ob Unterkategorien der angegebenen Kategorie einbezogen werden sollen.
    • false: Nur die ausgewählte Kategorie.
    • true: Auch Unterkategorien einschließen.

Kategoriefilterung
Die Common Table Expression (CTE) category_filter ruft die ausgewählten Kategorie-IDs basierend auf dem Parameter :category_id ab. Wenn der Parameter 0 ist, werden alle Kategorien einbezogen. Wenn Unterkategorien einbezogen werden sollen, werden Kategorien gefunden, bei denen parent_category_id mit der angegebenen :category_id übereinstimmt.

Themenstatistiken abrufen
Statistiken zur Themenansicht werden aus der Tabelle topic_view_stats aggregiert und mit der Tabelle topics verknüpft, um die Titel der Themen abzurufen.

Datums- und Kategoriefilter anwenden
Die Abfrage filtert die Daten von topic_view_stats:

  • Nach dem angegebenen Datumsbereich (:start_date und :end_date).
  • Nach Kategorie, übereinstimmend mit den IDs in category_filter.

Gesamtansichten berechnen
Die Abfrage summiert:

  • anonymous_views: Aufrufe von anonymen Benutzern.
  • logged_in_views: Aufrufe von angemeldeten Benutzern.
  • Gesamtansichten als Summe aus beidem.

Ranking und Begrenzung:
Die Abfrage ordnet Themen nach total_views und begrenzt das Ergebnis auf die Top 100 Themen.

Abfrageergebnisse
Die Abfrage gibt die folgenden Spalten zurück:

Spaltenname Beschreibung
topic_id Die eindeutige Kennung für das Thema.
topic_title Der Titel des Themas.
total_anonymous_views Die Gesamtzahl der Aufrufe von anonymen Benutzern.
total_logged_in_views Die Gesamtzahl der Aufrufe von angemeldeten Benutzern.
total_views Die Gesamtzahl der Aufrufe (anonym + angemeldet).

Beispielergebnisse

topic_id topic_title total_anonymous_views total_logged_in_views total_views
12345 „Beispielthema 1“ 500 300 800
67890 „Beispielthema 2“ 450 350 800
3 „Gefällt mir“