Report della Dashboard - Soluzioni accettate

Questa è una versione SQL del Report della Bacheca per le Soluzioni Accettate.

Questo report fornisce il conteggio dei post contrassegnati come soluzioni su base giornaliera all’interno di un intervallo di date specificato. È utile per comprendere con quale frequenza gli utenti trovano risposte alle loro domande e le contrassegnano come soluzioni nel tempo.

-- [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

Spiegazione della query SQL

Questa query utilizza la tabella discourse_solved_solved_topics e la tabella discourse_solved_topic_answers, introdotta nella Discourse PR #39806.

  • Parametri: La query accetta:
    • I parametri :start_date e :end_date nel formato AAAA-MM-GG con valori predefiniti
    • Un opzionale :category_id per filtrare per categoria specifica
  • Espressione di tabella comune: Utilizza una CTE denominata daily_solutions per organizzare la logica
  • Join:
    • posts - Garantisce che il post della soluzione esista ancora e non sia stato eliminato
    • topics - Garantisce che l’argomento esista, non sia un messaggio privato e non sia stato eliminato
    • users - Verifica che l’autore della soluzione sia un utente valido
  • Filtraggio: La clausola WHERE:
    • Limita all’intervallo di date specificato
    • Garantisce che gli utenti siano attivi, non silenziati e non sospesi
    • Consente il filtraggio opzionale per categoria
  • Raggruppamento e ordinamento: Raggruppa per data e ordina in ordine cronologico

L’output di questa query sarà un elenco di date con il conteggio corrispondente dei post contrassegnati come soluzioni in ciascuna di quelle date.

Risultati di esempio

giorno soluzioni_accettate
2023-11-14 16
2023-11-15 5
2023-11-16 10
2023-11-17 4
2023-11-18 2
2 Mi Piace