Dashboard-Bericht – Angenommene Lösungen

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_date und :end_date-Parameter im Format JJJJ-MM-TT mit Standardwerten
    • Eine optionale :category_id zur 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 wurde
    • topics – Stellt sicher, dass das Thema existiert, keine private Nachricht ist und nicht gelöscht wurde
    • users – 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
2 „Gefällt mir“