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_datee:end_datein formatoAAAA-MM-GGcon valori predefiniti - Un
:category_idopzionale per filtrare per categoria specifica
- Parametri
- Common Table Expression: Utilizza una CTE denominata
daily_solutionsper organizzare la logica - Join:
posts- Assicura che il post della soluzione esista ancora e non sia stato eliminatotopics- Assicura che l’argomento esista, non sia un messaggio privato e non sia stato eliminatousers- 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 |
| … | … |