Dies ist eine SQL-Version des Dashboard-Berichts für akzeptierte Lösungen.
Dieser Bericht liefert eine tägliche Zählung von Beiträgen, die innerhalb eines bestimmten Datumsbereichs als Lösungen markiert wurden. Er ist nützlich, um zu verstehen, wie oft Benutzer Antworten auf ihre Fragen finden und diese im Laufe der Zeit 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(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
Erklärung der SQL-Abfrage
Diese Abfrage verwendet die Tabelle discourse_solved_solved_topics, die im discourse-solved PR #352 eingeführt wurde:
- Parameter: Die Abfrage akzeptiert:
:start_dateund:end_dateParameter im FormatJJJJ-MM-TTmit Standardwerten- Eine optionale
:category_idzur Filterung nach einer bestimmten Kategorie
- Common Table Expression (CTE): Verwendet eine CTE namens
daily_solutions, um die Logik zu organisieren - 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- Überprüft, ob der Lösungsautor ein gültiger Benutzer ist
- Filterung: Die
WHERE-Klausel:- Beschränkt auf den angegebenen Datumsbereich
- Stellt sicher, dass Benutzer aktiv, nicht zum Schweigen gebracht und nicht suspendiert 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 Daten als Lösungen markiert wurden.
Beispielergebnisse
| Tag | akzeptierte_Lösungen |
|---|---|
| 2023-11-14 | 16 |
| 2023-11-15 | 5 |
| 2023-11-16 | 10 |
| 2023-11-17 | 4 |
| 2023-11-18 | 2 |
| … | … |