Dashboard-Bericht - Akzeptierte Lösungen

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_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 (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 wurde
    • topics - Stellt sicher, dass das Thema existiert, keine private Nachricht ist und nicht gelöscht wurde
    • users - Ü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
2 „Gefällt mir“