Questa è una versione SQL del report della dashboard per Notify User.
Questo report della dashboard fornisce un conteggio giornaliero del numero di volte in cui gli utenti sono stati notificati privatamente da un flag su uno dei loro post.
-- [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
Spiegazione della query SQL
La query funziona estraendo dati dalla tabella topics, in particolare quelli che si qualificano come messaggi privati agli utenti con un sottotipo di notify_user entro un intervallo di tempo specificato. Analizziamola nel dettaglio:
- Parametri Data:
- La query accetta due parametri,
:start_datee:end_date, che definiscono l’intervallo di date per il report. Entrambi i parametri data accettano il formato dataAAAA-MM-GG.
- La query accetta due parametri,
- Selezione e Conteggio:
DATE(created_at)converte il timestampcreated_atin un formato data e lo etichetta comeday. Ciò consente di raggruppare e contare i messaggi in base al giorno in cui sono stati creati.COUNT(1)viene utilizzato per contare il numero di voci per ogni giorno, etichettando questo conteggio comenotifications_count.
- Criteri di Filtro:
- La query filtra solo le voci in cui l’
archetypeè'private_message', assicurando che stiamo esaminando solo i messaggi e non altri tipi di argomenti. - Il
subtypeè limitato a'notify_user', isolando i casi in cui gli utenti sono stati notificati riguardo a post contrassegnati. - Verifica che il timestamp
created_atdel messaggio sia compreso tra:start_datee:end_datespecificati. - I messaggi che sono stati eliminati (
deleted_at IS NULL) sono esclusi dal conteggio per garantire che il report rifletta solo le comunicazioni attive. - Infine, garantisce che i messaggi siano associati a un utente valido confermando
user_id > 0.
- La query filtra solo le voci in cui l’
- Raggruppamento e Ordinamento:
- La query utilizza
GROUP BY DATE(created_at)per aggregare i risultati per ogni giorno nell’intervallo di date specificato. - Quindi ordina i risultati cronologicamente con
ORDER BY day, rendendo il report facile da leggere e interpretare.
- La query utilizza
Risultati di esempio
| day | notifications_count |
|---|---|
| 2023-12-17 | 1 |
| 2023-12-18 | 1 |
| 2023-12-21 | 1 |
| 2023-12-23 | 1 |
| 2023-12-26 | 1 |