Rapport de tableau de bord - Notifier l'utilisateur

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_date et :end_date, qui définissent la plage de dates pour le rapport. Les deux paramètres de date acceptent le format de date AAAA-MM-JJ.
  • Sélection et comptage :
    • DATE(created_at) convertit l’horodatage created_at en un format de date et le nomme day. 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 compte notifications_count.
  • Critères de filtrage :
    • La requête filtre uniquement les entrées où l’archetype est 'private_message', garantissant que nous examinons uniquement les messages et non d’autres types de sujets.
    • Le subtype est limité à 'notify_user', isolant les cas où les utilisateurs ont été notifiés de messages signalés.
    • Elle vérifie que l’horodatage created_at du message se situe entre le :start_date et le :end_date spé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.
  • 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.

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
1 « J'aime »