Rapport du tableau de bord - Solutions acceptées

Il s’agit d’une version SQL du rapport du tableau de bord pour les solutions acceptées.

Ce rapport fournit un comptage des messages marqués comme solutions au quotidien, sur 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(ta.created_at) AS solution_date,
    COUNT(*) AS solution_count
  FROM discourse_solved_solved_topics st
  JOIN discourse_solved_topic_answers ta ON ta.solved_topic_id = st.id
  JOIN posts p ON p.id = ta.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(ta.created_at)
)

SELECT 
  solution_date,
  solution_count
FROM daily_solutions
ORDER BY solution_date

Explication de la requête SQL

Cette requête utilise les tables discourse_solved_solved_topics et discourse_solved_topic_answers, cette dernière ayant été introduite dans le Discourse PR #39806.

  • Paramètres : La requête accepte :
    • Les paramètres :start_date et :end_date au format AAAA-MM-JJ avec des valeurs par défaut
    • Un paramètre optionnel :category_id pour filtrer par catégorie spécifique
  • Expression de table commune : Utilise une CTE nommée daily_solutions pour organiser la logique
  • Jointures :
    • posts - Garantit que le message de solution existe toujours et n’est pas supprimé
    • 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 mis en sourdine 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 messages marqués comme solutions à chacune de ces dates.

Résultats exemples

jour solutions_acceptées
2023-11-14 16
2023-11-15 5
2023-11-16 10
2023-11-17 4
2023-11-18 2
2 « J'aime »