Ceci est une version SQL du rapport de tableau de bord pour Notify User.
Ce rapport de tableau de bord fournit un décompte quotidien du nombre de fois où les utilisateurs ont été notifiés en privé par un signalement sur l’un de leurs messages.
-- [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
Explication de la requête SQL
La requête fonctionne en extrayant des données de la table topics – spécifiquement, celles qui sont qualifiées de messages privés aux utilisateurs avec un sous-type de notify_user dans un intervalle de temps donné. Décomposons-la :
- Paramètres de date :
- La requête accepte deux paramètres,
:start_dateet:end_date, qui définissent la plage de dates pour le rapport. Les deux paramètres de date acceptent le format de dateAAAA-MM-JJ.
- La requête accepte deux paramètres,
- Sélection et comptage :
DATE(created_at)convertit l’horodatagecreated_aten un format de date et le nommeday. Cela permet de regrouper et de compter les messages par le jour où ils ont été créés.COUNT(1)est utilisé pour compter le nombre d’entrées pour chaque jour, nommant ce comptenotifications_count.
- Critères de filtrage :
- La requête filtre uniquement les entrées où l’
archetypeest'private_message', garantissant que nous examinons uniquement les messages et non d’autres types de sujets. - Le
subtypeest limité à'notify_user', isolant les cas où les utilisateurs ont été notifiés de messages signalés. - Elle vérifie que l’horodatage
created_atdu message se situe entre le:start_dateet le:end_datespécifiés. - Les messages qui ont été supprimés (
deleted_at IS NULL) sont exclus du décompte pour garantir que le rapport reflète uniquement les communications actives. - Enfin, elle s’assure que les messages sont associés à un utilisateur valide en confirmant
user_id > 0.
- La requête filtre uniquement les entrées où l’
- Regroupement et tri :
- La requête utilise
GROUP BY DATE(created_at)pour agréger les résultats par chaque jour dans la plage de dates spécifiée. - Ensuite, elle trie les résultats chronologiquement avec
ORDER BY day, rendant le rapport facile à lire et à interpréter.
- La requête utilise
Exemple de résultats
| day | notifications_count |
|---|---|
| 2023-12-17 | 1 |
| 2023-12-18 | 1 |
| 2023-12-21 | 1 |
| 2023-12-23 | 1 |
| 2023-12-26 | 1 |