Ceci est une version SQL du rapport de tableau de bord pour les solutions acceptées.
Ce rapport fournit un décompte des publications marquées comme solutions sur une base quotidienne dans une plage de dates spécifiée. Il est utile pour comprendre à quelle fréquence les utilisateurs trouvent des réponses à leurs questions et les marquent comme solutions au fil du temps.
-- [params]
-- date :start_date = 2025-03-01
-- date :end_date = 2025-04-01
-- null category_id :category_id
WITH daily_solutions AS (
SELECT
DATE(st.created_at) AS solution_date,
COUNT(*) AS solution_count
FROM discourse_solved_solved_topics st
JOIN posts p ON p.id = st.answer_post_id AND p.deleted_at IS NULL
JOIN topics t ON t.id = st.topic_id
AND t.archetype <> 'private_message'
AND t.deleted_at IS NULL
AND (:category_id IS NULL OR t.category_id = :category_id)
JOIN users u ON u.id = p.user_id
WHERE
st.created_at BETWEEN :start_date AND :end_date
AND u.id > 0
AND u.active
AND u.silenced_till IS NULL
AND u.suspended_till IS NULL
GROUP BY DATE(st.created_at)
)
SELECT
solution_date,
solution_count
FROM daily_solutions
ORDER BY solution_date
Explication de la requête SQL
Cette requête utilise la table discourse_solved_solved_topics introduite dans le PR discourse-solved #352 :
- Paramètres : La requête accepte :
- Les paramètres
:start_dateet:end_dateau formatAAAA-MM-JJavec des valeurs par défaut. - Un
:category_idoptionnel pour filtrer par catégorie spécifique.
- Les paramètres
- Expression de table commune : Utilise une CTE nommée
daily_solutionspour organiser la logique. - Jointures :
posts- Garantit que la publication de solution existe toujours et n’est pas supprimée.topics- Garantit que le sujet existe, n’est pas un message privé et n’est pas supprimé.users- Vérifie que l’auteur de la solution est un utilisateur valide.
- Filtrage : La clause
WHERE:- Limite à la plage de dates spécifiée.
- Garantit que les utilisateurs sont actifs, non réduits au silence et non suspendus.
- Permet un filtrage optionnel par catégorie.
- Regroupement et tri : Regroupe par date et trie chronologiquement.
Le résultat de cette requête sera une liste de dates avec le nombre correspondant de publications marquées comme solutions à chacune de ces dates.
Exemple de résultats
| jour | solutions_acceptées |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |