Dashboard-Bericht - Benutzer benachrichtigen

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_date und :end_date, die den Datumsbereich für den Bericht definieren. Beide Datumsparameter akzeptieren das Datumsformat JJJJ-MM-TT.
  • Auswahl und Zählung:
    • DATE(created_at) konvertiert den Zeitstempel created_at in ein Datumsformat und bezeichnet ihn als day. 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 als notifications_count zu 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 subtype ist 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_at der Nachricht zwischen dem angegebenen :start_date und :end_date liegt.
    • 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 > 0 sichergestellt, dass die Nachrichten einem gültigen Benutzer zugeordnet sind.
  • 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 day sortiert, was den Bericht leicht lesbar und interpretierbar macht.

Beispielergebnisse

day notifications_count
2023-12-17 1
2023-12-18 1
2023-12-21 1
2023-12-23 1
2023-12-26 1
1 „Gefällt mir“