Rapporto Dashboard - Soluzioni Accettate

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

Questo report fornisce un conteggio dei post contrassegnati come soluzioni su base giornaliera entro un intervallo di date specificato. È utile per capire quanto spesso 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(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

Spiegazione della query SQL

Questa query utilizza la tabella discourse_solved_solved_topics introdotta nel PR #352 di discourse-solved:

  • Parametri: La query accetta:
    • Parametri :start_date e :end_date in formato AAAA-MM-GG con valori predefiniti
    • Un :category_id opzionale per filtrare per categoria specifica
  • Common Table Expression: Utilizza una CTE denominata daily_solutions per organizzare la logica
  • Join:
    • posts - Assicura che il post della soluzione esista ancora e non sia stato eliminato
    • topics - Assicura 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
  • Filtro: La clausola WHERE:
    • Limita all’intervallo di date specificato
    • Assicura che gli utenti siano attivi, non silenziati e non sospesi
    • Consente il filtraggio opzionale per categoria
  • Raggruppamento e Ordinamento: Raggruppa per data e ordina cronologicamente

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

Esempio di risultati

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