Rapport de tableau de bord - Solutions acceptées

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_date et :end_date au format AAAA-MM-JJ avec des valeurs par défaut.
    • Un :category_id optionnel 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 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
2 « J'aime »