Eine Zusammenfassung der Abstimmungen nach Thema, einschließlich Tags

Ich hätte gerne eine Data Explorer-Abfrage für alle Themen in einer Kategorie und die Anzahl der Stimmen für jedes Thema. Ich bin neu bei SQL-Abfragen und konnte nichts finden, das nahe genug aussah, um es anzupassen.

Idealerweise würde es so aussehen:

Thema Stimmen Antworten Tags Geschlossen
Beispielthema 1 85 62 Web, iOS, Android FALSCH
Beispielthema 2 79 45 Web WAHR

Kann mir jemand dabei helfen? Entschuldigung, wenn dies der falsche Ort ist. Es schien das nächstgelegene Thema zu sein.

1 „Gefällt mir“

Hallo und willkommen @CarrieSeltzer :slight_smile:

Würde so etwas für Sie funktionieren?

-- [params]
-- int :category_id 

WITH tag_names AS (
    SELECT t.id topic_id,
    string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
    JOIN topic_tags tt ON tt.topic_id = t.id
    JOIN tags ON tags.id = tt.tag_id
    GROUP BY t.id
)

SELECT t.created_at::date,
       dvtvc.topic_id,
       votes_count,
       t.posts_count,
       tn.tags,
       t.closed
FROM discourse_voting_topic_vote_count dvtvc
JOIN topics t ON t.id = dvtvc.topic_id
LEFT JOIN tag_names tn ON dvtvc.topic_id = tn.topic_id
WHERE t.category_id = :category_id
AND votes_count > 0
ORDER BY t.created_at DESC

1 „Gefällt mir“

Ja, danke! Das ist großartig! Ich brauche nur eine kleine Änderung – wie bekomme ich es dazu, den Namen des Themas im CSV-Export anzuzeigen (nicht nur die Themen-ID)?

1 „Gefällt mir“

Ich denke, das Hinzufügen von t.title zu SELECT sollte Folgendes einschließen:

-- [params]
-- int :category_id 

WITH tag_names AS (
    SELECT t.id topic_id,
    string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
    JOIN topic_tags tt ON tt.topic_id = t.id
    JOIN tags ON tags.id = tt.tag_id
    GROUP BY t.id
)

SELECT t.created_at::date,
       dvtvc.topic_id,
       t.title,
       votes_count,
       t.posts_count,
       tn.tags,
       t.closed
FROM discourse_voting_topic_vote_count dvtvc
JOIN topics t ON t.id = dvtvc.topic_id
LEFT JOIN tag_names tn ON dvtvc.topic_id = tn.topic_id
WHERE t.category_id = :category_id
AND votes_count > 0
ORDER BY t.created_at DESC

Es gibt auch die Möglichkeit, einen funktionierenden Link zum Thema in den Export aufzunehmen, wenn Sie möchten, z. B.:

'https://meta.discourse.org/t/' || t.slug || '/' || t.id AS topic_url,
2 „Gefällt mir“

Ich komme mir albern vor, das zu fragen, aber ich kann ehrlich gesagt nicht herausfinden, wo ich diesen Teil in den obigen Code einfügen würde. Wo würde er hingehören?

2 „Gefällt mir“

Das ist in Ordnung. :slight_smile: Es würde hier hineinpassen: (ändern Sie es einfach in Ihre eigene Website-Adresse anstelle von Meta)

-- [params]
-- int :category_id

WITH tag_names AS (
    SELECT t.id topic_id,
    string_agg(tags.name, ', ' ORDER BY tags.name) AS "tags"
    FROM topics t
    JOIN topic_tags tt ON tt.topic_id = t.id
    JOIN tags ON tags.id = tt.tag_id
    GROUP BY t.id
)

SELECT t.created_at::date,
       dvtvc.topic_id,
       t.title,
       'https://meta.discourse.org/t/' || t.slug || '/' ||
       t.id AS topic_url,
       votes_count,
       t.posts_count,
       tn.tags,
       t.closed
FROM discourse_voting_topic_vote_count dvtvc
JOIN topics t ON t.id = dvtvc.topic_id
LEFT JOIN tag_names tn ON dvtvc.topic_id = tn.topic_id
WHERE t.category_id = :category_id
AND votes_count > 0
ORDER BY t.created_at DESC

2 „Gefällt mir“