Ceci est une version SQL du rapport de tableau de bord pour le ratio de signalement des utilisateurs.
Ce rapport de tableau de bord génère une liste d’utilisateurs classés par le ratio des réponses du personnel à leurs signalements (approuvés et désapprouvés). Le rapport comprend des informations sur l’activité de signalement de chaque utilisateur, en se concentrant spécifiquement sur le nombre de signalements qui ont été approuvés, désapprouvés ou ignorés par les modérateurs, ainsi qu’un score calculé représentant la performance de signalement de l’utilisateur.
Le rapport est utile aux administrateurs pour identifier les utilisateurs qui signalent avec précision le contenu inapproprié, évaluer l’engagement des utilisateurs dans la modération communautaire, fournir des commentaires sur les pratiques de signalement et évaluer la performance de signalement des utilisateurs pour d’éventuels rôles de modérateur.
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-02-01
SELECT
u.id AS user_id,
u.username,
CASE
WHEN u.silenced_till IS NOT NULL THEN 't'
ELSE 'f'
END AS silenced,
SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END)::numeric AS disagreed_flags,
SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric AS agreed_flags,
SUM(CASE WHEN rs.status = 3 THEN 1 ELSE 0 END)::numeric AS ignored_flags,
(
CASE
WHEN SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END)::numeric = 0 THEN
SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric * SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric
ELSE
ROUND(
(1 - (SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric / SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END))) *
(SUM(CASE WHEN rs.status = 2 THEN 1 ELSE 0 END) - SUM(CASE WHEN rs.status = 1 THEN 1 ELSE 0 END)::numeric)
)
END
) AS score
FROM
users AS u
INNER JOIN reviewable_scores AS rs ON rs.user_id = u.id
WHERE
u.id > 0
AND rs.created_at >= :start_date
AND rs.created_at <= :end_date
GROUP BY
u.id,
u.username,
u.uploaded_avatar_id,
u.silenced_till
ORDER BY
score DESC
LIMIT 100
Explication de la requête SQL
Voici une ventilation de la requête :
- Paramètres : La requête accepte deux paramètres,
:start_dateet:end_date, qui permettent à l’utilisateur de spécifier la plage de dates pour le rapport. Les deux paramètres de date acceptent le format de dateAAAA-MM-JJ. - Clause SELECT : La requête sélectionne les colonnes suivantes :
user_id: L’identifiant unique de l’utilisateur.username: Le nom d’utilisateur de l’utilisateur.silenced: Une valeur booléenne indiquant si l’utilisateur est actuellement réduit au silence.disagreed_flags: Le nombre total de signalements d’utilisateurs qui ont été désapprouvés par les modérateurs.agreed_flags: Le nombre total de signalements d’utilisateurs qui ont été approuvés par les modérateurs.ignored_flags: Le nombre total de signalements d’utilisateurs qui ont été ignorés par les modérateurs.score: Un score calculé représentant la performance de signalement de l’utilisateur.
- Clause FROM : La requête joint la table
usersavec la tablereviewable_scoressuruser_idpour obtenir des informations de signalement relatives à chaque utilisateur. - Clause WHERE : La requête filtre les données pour inclure uniquement les enregistrements des utilisateurs dont l’
idest supérieur à 0 et dont la datecreated_atdes scores examinables se situe dans la plage de dates spécifiée. - Clause GROUP BY : La requête regroupe les résultats par
user_id,username,uploaded_avatar_idetsilenced_tillpour agréger les données de signalement pour chaque utilisateur. - Clause ORDER BY : La requête trie les résultats par le
scorecalculé dans l’ordre décroissant pour afficher d’abord les utilisateurs ayant les meilleures performances de signalement. - Clause LIMIT : La requête limite les résultats aux 100 meilleurs utilisateurs en fonction du score calculé.
Exemple de résultats
| user | username | silenced | disagreed_flags | agreed_flags | ignored_flags | score |
|---|---|---|---|---|---|---|
| user_1_id | user_1 | f | 0.0 | 10.0 | 3.0 | 100.0 |
| user_2_id | user_2 | f | 0.0 | 6.0 | 3.0 | 36.0 |
| user_3_id | user_3 | f | 0.0 | 4.0 | 0.0 | 16.0 |
| … | … | … | … | … | … | … |