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.
-- [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
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)?
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,
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?
Das ist in Ordnung. 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