Ceci est une version SQL du rapport de tableau de bord pour les drapeaux
Ce rapport fournit un décompte des publications signalées dans une catégorie spécifique facultative (et éventuellement ses sous-catégories) sur une période donnée. Ces informations peuvent être utiles aux gestionnaires de communauté et aux modérateurs pour comprendre le volume des signalements effectués dans certaines parties du forum, ce qui peut aider à identifier les tendances et les domaines qui peuvent nécessiter une attention ou une modération supplémentaires.
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
-- null int :category_id = 0
-- boolean :include_subcategories = false
WITH RECURSIVE subcategories AS (
SELECT id FROM categories WHERE id = :category_id
UNION ALL
SELECT c.id FROM categories c
INNER JOIN subcategories sc ON c.parent_category_id = sc.id
)
SELECT
DATE(r.created_at) AS flag_date,
COUNT(r.id) AS flags_count
FROM reviewables r
LEFT JOIN categories c ON r.category_id = c.id
WHERE r.type = 'ReviewableFlaggedPost'
AND r.created_at::DATE BETWEEN :start_date AND :end_date
AND (:category_id = 0 OR (
:include_subcategories
AND r.category_id IN (SELECT id FROM subcategories)
OR NOT :include_subcategories
AND r.category_id = :category_id
))
GROUP BY flag_date
ORDER BY flag_date
Explication de la requête SQL
La requête SQL est conçue pour compter le nombre de signalements (représentés par des enregistrements ReviewableFlaggedPost dans la table reviewables) créés chaque jour dans la plage de dates et la catégorie spécifiées. Elle utilise une expression de table commune (CTE) récursive pour inclure éventuellement les sous-catégories de la catégorie choisie.
Paramètres
:start_date: Le début de la plage de dates pour laquelle compter les signalements.:end_date: La fin de la plage de dates pour laquelle compter les signalements.:category_id: L’ID de la catégorie pour laquelle compter les signalements. S’il est défini sur 0, le filtre sur la catégorie n’est pas appliqué.:include_subcategories: Une valeur booléenne qui détermine s’il faut inclure les sous-catégories de la catégorie spécifiée dans le décompte.
Répartition de la requête
- CTE récursive (
subcategories) :- Cette CTE commence par sélectionner la catégorie dont l’ID est fourni par le paramètre
:category_id. - Elle sélectionne ensuite récursivement toutes les sous-catégories de cette catégorie en joignant la table
categoriesavec la CTEsubcategoriessur le champparent_category_id. - Le résultat est une liste de toutes les sous-catégories (y compris la catégorie initiale) qui sera utilisée pour le filtrage.
- Cette CTE commence par sélectionner la catégorie dont l’ID est fourni par le paramètre
- Requête principale :
- La requête sélectionne deux colonnes : la date de création du signalement (
flag_date) et le nombre de signalements (flags_count) pour cette date. - Elle joint la table
reviewablesavec la tablecategoriespour associer chaque signalement à sa catégorie.
- La requête sélectionne deux colonnes : la date de création du signalement (
- Filtres :
- La requête filtre les enregistrements
reviewablespour n’inclure que ceux de typeReviewableFlaggedPost, qui représente les publications signalées. - Elle garantit que la date
created_atdes signalements se situe dans la plage de dates spécifiée (:start_dateà:end_date). - Elle applique un filtre conditionnel basé sur les paramètres
:category_idet:include_subcategories:- Si
:category_idest 0, aucun filtre de catégorie n’est appliqué. - Si
:include_subcategoriesesttrue, la requête inclut les signalements de la catégorie initiale et de toutes ses sous-catégories. - Si
:include_subcategoriesestfalse, la requête inclut les signalements uniquement de la catégorie initiale.
- Si
- La requête filtre les enregistrements
- Regroupement et tri :
- Les résultats sont regroupés par la date de création du signalement pour fournir un décompte par jour.
- Les résultats sont triés par date pour présenter les données dans une séquence chronologique.
Résultats d’exemple
| flag_date | flags_count |
|---|---|
| 2023-11-19 | 2 |
| 2023-11-22 | 1 |
| 2023-11-23 | 1 |
| 2023-11-24 | 2 |
| 2023-11-26 | 1 |
| … | … |