Dies ist eine SQL-Version des Dashboard-Berichts für angenommene Lösungen.
Dieser Bericht liefert eine tägliche Anzahl von Beiträgen, die innerhalb eines angegebenen Datumsbereichs als Lösungen markiert wurden. Er ist nützlich, um zu verstehen, wie häufig Nutzer im Laufe der Zeit Antworten auf ihre Fragen finden und diese als Lösungen markieren.
-- [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
Erklärung der SQL-Abfrage
Diese Abfrage verwendet die Tabelle discourse_solved_solved_topics und die Tabelle discourse_solved_topic_answers, die im Discourse PR #39806 eingeführt wurde.
- Parameter: Die Abfrage akzeptiert:
:start_dateund:end_date-Parameter im FormatJJJJ-MM-TTmit Standardwerten- Eine optionale
:category_idzur Filterung nach einer bestimmten Kategorie
- Common Table Expression: Verwendet eine CTE namens
daily_solutions, um die Logik zu strukturieren - Joins:
posts– Stellt sicher, dass der Lösungsbeitrag noch existiert und nicht gelöscht wurdetopics– Stellt sicher, dass das Thema existiert, keine private Nachricht ist und nicht gelöscht wurdeusers– Verifiziert, dass der Urheber des Lösungsbeitrags ein gültiger Benutzer ist
- Filterung: Die
WHERE-Klausel:- Beschränkt den Zeitraum auf das angegebene Datumsintervall
- Stellt sicher, dass Benutzer aktiv sind, nicht stummgeschaltet und nicht gesperrt sind
- Ermöglicht eine optionale Filterung nach Kategorie
- Gruppierung und Sortierung: Gruppiert nach Datum und sortiert chronologisch
Die Ausgabe dieser Abfrage ist eine Liste von Daten mit der entsprechenden Anzahl von Beiträgen, die an jedem dieser Tage als Lösungen markiert wurden.
Beispiel-Ergebnisse
| Tag | angenommene_lösungen |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |