トピックごとの投票概要(タグを含む)

カテゴリ内のすべてのトピックと、それぞれの投票数を取得できるデータエクスプローラークエリがあれば嬉しいです。SQLクエリは初心者で、調整できそうな既存のものを見つけることができませんでした。

理想的には、以下のようになります。

トピック 投票数 返信数 タグ 終了
例トピック1 85 62 web, ios, android FALSE
例トピック2 79 45 web TRUE

どなたか手伝っていただけませんか?もしここが不適切な場所であれば申し訳ありません。既存のトピックの中で最も近いと思われたため、こちらに投稿しました。

「いいね!」 1

こんにちは、ようこそ @CarrieSeltzer さん :slight_smile:

このようなものでよろしいでしょうか?

-- [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

はい、ありがとうございます!素晴らしいです!一点だけ微調整が必要です。CSVエクスポートでトピックIDだけでなく、トピック名を表示させるにはどうすればよいですか?

「いいね!」 1

t.title を SELECT に追加すると、それも含まれるはずだと思います。

-- [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

また、エクスポートにトピックへの動作リンクを含めるオプションもあります。たとえば、次のように使用できます。

'https://meta.discourse.org/t/' || t.slug || '/' || t.id AS topic_url,
「いいね!」 2

こんなことを聞くのは馬鹿げていると思いますが、上記のコードのどこにこの部分を追加すればよいのか、正直わかりません。どこに行きますか?

「いいね!」 2

問題ありません。 :slight_smile: ここに挿入されます。(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