Dies ist eine SQL-Version des Dashboard-Berichts für „Notify User“.
Dieser Dashboard-Bericht liefert eine tägliche Zählung, wie oft Benutzer privat durch ein Flag in einem ihrer Beiträge benachrichtigt wurden.
-- [params]
-- date :start_date = 2023-12-15
-- date :end_date = 2024-01-16
SELECT
DATE(created_at) AS day,
COUNT(1) AS notifications_count
FROM topics
WHERE archetype = 'private_message'
AND subtype = 'notify_user'
AND created_at BETWEEN :start_date AND :end_date
AND deleted_at IS NULL
AND user_id > 0
GROUP BY DATE(created_at)
ORDER BY day
Erklärung der SQL-Abfrage
Die Abfrage extrahiert Daten aus der topics-Tabelle – insbesondere solche, die als private Nachrichten an Benutzer mit dem Untertyp notify_user innerhalb eines bestimmten Zeitrahmens qualifiziert sind. Lassen Sie uns dies aufschlüsseln:
- Datumsangaben:
- Die Abfrage akzeptiert zwei Parameter,
:start_dateund:end_date, die den Datumsbereich für den Bericht definieren. Beide Datumsparameter akzeptieren das DatumsformatJJJJ-MM-TT.
- Die Abfrage akzeptiert zwei Parameter,
- Auswahl und Zählung:
DATE(created_at)konvertiert den Zeitstempelcreated_atin ein Datumsformat und bezeichnet ihn alsday. Dies ermöglicht die Gruppierung und Zählung von Nachrichten nach dem Tag ihrer Erstellung.COUNT(1)wird verwendet, um die Anzahl der Einträge für jeden Tag zu zählen und diese Zählung alsnotifications_countzu bezeichnen.
- Filterkriterien:
- Die Abfrage filtert nur die Einträge, bei denen der
archetype'private_message'ist, um sicherzustellen, dass wir nur Nachrichten und keine anderen Arten von Themen betrachten. - Der
subtypeist auf'notify_user'beschränkt, um Fälle zu isolieren, in denen Benutzer über markierte Beiträge benachrichtigt wurden. - Es wird geprüft, ob der Zeitstempel
created_atder Nachricht zwischen dem angegebenen:start_dateund:end_dateliegt. - Nachrichten, die gelöscht wurden (
deleted_at IS NULL), werden von der Zählung ausgeschlossen, um sicherzustellen, dass der Bericht nur aktive Mitteilungen widerspiegelt. - Schließlich wird durch die Bestätigung
user_id > 0sichergestellt, dass die Nachrichten einem gültigen Benutzer zugeordnet sind.
- Die Abfrage filtert nur die Einträge, bei denen der
- Gruppierung und Sortierung:
- Die Abfrage verwendet
GROUP BY DATE(created_at), um die Ergebnisse für jeden Tag innerhalb des angegebenen Datumsbereichs zu aggregieren. - Anschließend werden die Ergebnisse chronologisch mit
ORDER BY daysortiert, was den Bericht leicht lesbar und interpretierbar macht.
- Die Abfrage verwendet
Beispielergebnisse
| day | notifications_count |
|---|---|
| 2023-12-17 | 1 |
| 2023-12-18 | 1 |
| 2023-12-21 | 1 |
| 2023-12-23 | 1 |
| 2023-12-26 | 1 |