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_datee:end_datenel formatoAAAA-MM-GGcon valori predefiniti - Un opzionale
:category_idper filtrare per categoria specifica
- I parametri
- Espressione di tabella comune: Utilizza una CTE denominata
daily_solutionsper organizzare la logica - Join:
posts- Garantisce che il post della soluzione esista ancora e non sia stato eliminatotopics- Garantisce che l’argomento esista, non sia un messaggio privato e non sia stato eliminatousers- 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 |
| … | … |