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.
Diese Abfrage und die Datenbanktabelle
topic_view_statswurden 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:
0fü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_dateund: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 |