Un résumé des votes par sujet, y compris les étiquettes

J’aimerais avoir une requête Data Explorer pour tous les sujets d’une catégorie et le nombre de votes sur chacun. Je suis nouveau dans les requêtes SQL et je n’ai rien trouvé d’existant qui ressemble assez pour que je puisse le modifier.

Idéalement, cela ressemblerait à ceci :

sujet votes réponses tags fermé
exemple de sujet 1 85 62 web, ios, android FAUX
exemple de sujet 2 79 45 web VRAI

Quelqu’un peut-il m’aider avec ça ? Mes excuses si c’est le mauvais endroit. Cela semblait être le sujet existant le plus proche.

1 « J'aime »

Bonjour et bienvenue @CarrieSeltzer :slight_smile:

Est-ce que quelque chose comme ceci fonctionnerait pour vous ?

-- [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 « J'aime »

Oui, merci ! C’est super ! J’ai juste besoin d’une petite modification : comment faire pour afficher le nom du sujet dans l’export CSV (pas seulement l’ID du sujet) ?

1 « J'aime »

Je pense que l’ajout de t.title à la requête SELECT devrait l’inclure :

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

Il y a aussi une option pour inclure un lien fonctionnel vers le sujet dans l’exportation si vous le souhaitez, en utilisant par exemple :

'https://meta.discourse.org/t/' || t.slug || '/' || t.id AS topic_url,
2 « J'aime »

Je me sens bête de poser cette question, mais je n’arrive honnêtement pas à comprendre où je devrais ajouter cette partie dans le code ci-dessus. Où irait-elle ?

2 « J'aime »

Ce n’est pas grave. :slight_smile: Cela irait ici : (changez simplement l’adresse de votre propre site à la place de 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 « J'aime »