Verstehen, Worüber unsere Nutzer posten

Ich möchte einen SQL-basierten Bericht erstellen, der Aufschluss darüber gibt, worüber unsere Benutzer posten.

Kategorien, Themen, Tags – das sind die Felder, die ich ermittelt habe, um dies zu erreichen, und Postcount wäre die Metrik (ich denke, ich möchte dies im Wesentlichen verwenden, um die Popularität zu verstehen).

Gibt es andere Felder, die dies unterstützen würden? Gibt es eine vorhandene Abfrage, die ich verwenden kann, da ich davon ausgehe, dass andere dies angefordert haben?

2 „Gefällt mir“

keine SQL-Abfrage, aber Sie haben wahrscheinlich bemerkt, dass:

/categories gibt Ihnen eine Anzahl neuer Themen/Monat für jede Kategorie, was sehr nützlich sein kann.

/tags gibt Ihnen eine Anzahl von Themen nach Tag

Nur für den Fall, dass Sie es nicht wussten (aber vielleicht wussten Sie es ja!).

1 „Gefällt mir“

Ich bin mir nicht sicher, worauf Sie sich hier beziehen.

Beziehen sich diese Berichte auf den Admin-Bereich einer Community?

Das habe ich gesehen, möchte aber im Grunde alles in einem haben – damit man sehen kann, wie viele Themen oder Tags eine Kategorie hat usw.

Es handelt sich um URL-Pfade.

Ich bin mir nicht sicher, ob ich mir ganz vorstellen kann, was Sie sich für die Einbeziehung von Kategorien, Tags und Themen mit einer Beitragszahl für jede in denselben Bericht/dieselbe Abfrage vorstellen.

Ich denke, Sie könnten es wahrscheinlich in zwei tun – eine für Kategorien und eine für Tags, mit einer Zählung neuer Themen und neuer Beiträge innerhalb eines bestimmten Zeitrahmens für jede. Vielleicht sogar die Anzahl der beitragenden Benutzer einbeziehen?

So würde es ungefähr so als Ergebnistabelle aussehen:

Kategorie Neue Themen Neue Beiträge Benutzer
Kategorie a 9 15 4
Kategorie b 56 167 32
2 „Gefällt mir“

Ok, ich habe Kategorien - Discourse Meta eingegeben, da ich davon ausgehe, dass Sie das meinten.

Im Wesentlichen möchte ich eine Ausgabe von Kategorien/Tags/Themen in einer einzigen Ausgabe aus folgenden Gründen:

  • Duplikate identifizieren - Ein Thema, soweit ich das verstehe, ist das Wort, das für den Beginn einer Konversation/eines Threads verwendet wird. Ein Benutzer könnte ein ähnliches Thema zu 2 verschiedenen Kategorien hinzugefügt haben. Es wäre gut, dies zu verstehen, um das Benutzerverhalten zu verstehen/möglicherweise die Kategorien anzupassen, um sie klarer zu machen.
  • Verstehen, welche Arten von Themen wir pro Kategorie erhalten - Eine Kategorie könnte so etwas wie “Autos” sein, aber natürlich könnte sie viele verschiedene Arten von Themen beherbergen. Wir wollen sehen, worüber die Benutzer wirklich sprechen.
  • Tags - In dem Fall, den wir haben, sehe ich, dass Tags als eine Art Überschneidung mehrerer verschiedener Kategorien verwendet wurden. Daher wäre es gut, die Beiträge auch aus dieser Perspektive zu verstehen.

Im Wesentlichen muss ich, soweit ich das beurteilen kann, Kategorien, Tags und Themen mit SQL und möglicherweise Beiträgen zusammenführen und frage mich, ob dies bereits geschehen ist, um den Code anzuzeigen/gibt es eine Art Code-/Abfragebibliothek?

Kategorie Thema Schlagwort Beiträge Benutzer
Autos Autos lieben Räder 44 1
Autos Autos hassen Räder 32 3
Autos Autos hassen Türen 39 4
Autos Wie funktionieren Autos? Türen 32 1
Wie funktionieren Dinge Wie funktionieren Autos? Anleitungen 32 3

Dies ist ein Beispiel für die Vision. Dies würde eine weitere Analyse ermöglichen, um Dinge zu verstehen wie „welcher % der Benutzer, die in der Kategorie Autos posten, über Räder sprechen“

Ich verstehe, dass es sich im Daten-Explorer befinden würde, der Beiträge, Themen, Schlagwörter, Kategorien und möglicherweise eine weitere Tabelle kombiniert – ich habe gerade hier gepostet, um zu verstehen, ob dies bereits geschehen ist/wo SQL-Abfragen existieren, die zuvor erstellt wurden (nicht auf unserem Konto, ich meine im Allgemeinen)

Ich hoffe, das ergibt Sinn, habe erst gestern angefangen zu recherchieren

Ah, ich verstehe jetzt. Sie möchten eine Themenliste mit zusätzlichen Details anstelle einer zusammenfassenden Übersicht. Ich denke, das sollte möglich sein. :+1:

Ich denke, das einzige Besondere wäre, dass ein Thema mehrere Tags haben kann, aber lassen Sie uns etwas ausarbeiten und sehen, wo wir landen. :slight_smile:

Aber zum Durchsuchen anderer vorhandener Abfragen gibt es die, die standardmäßig über Ihr Dashboard verfügbar sind (Sie können die SQL-Versionen hier unter dashboard-sql sehen), sowie einige Standardberichte, die mit dem Daten-Explorer gebündelt sind, und es gibt eine ganze Reihe benutzerdefinierter Berichte hier auf Meta, die unter dem Tag sql-query gruppiert sind.


@SStrong - Vielleicht etwas in dieser Art:

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-12-31


WITH tag_names AS (

    SELECT
        t.id AS 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
    WHERE t.created_at BETWEEN :start_date AND :end_date
    GROUP BY t.id
    ),

user_count AS (

    SELECT
        p.topic_id,
        COUNT(DISTINCT p.user_id) AS users
    FROM posts p
      JOIN topics t ON t.id = p.topic_id
    WHERE t.created_at BETWEEN :start_date AND :end_date
      AND t.deleted_at IS NULL
      AND p.deleted_at IS NULL
      AND t.archetype = 'regular'
      AND p.post_type = 1
      AND p.user_id > 0
    GROUP BY p.topic_id

)

SELECT
    t.category_id,
    t.id AS topic_id,
    tn.tags,
    t.posts_count,
    uc.users
FROM topics t
  JOIN tag_names tn ON tn.topic_id = t.id
  JOIN user_count uc ON uc.topic_id = t.id
WHERE t.created_at BETWEEN :start_date AND :end_date
  AND t.archetype = 'regular'
  AND t.deleted_at IS NULL
ORDER BY t.category_id, t.title
2 „Gefällt mir“

Entschuldigung, ich dachte, ich hätte bereits darauf geantwortet.

Ist es möglich, den Code so zu ändern, dass er den Kategorienamen und den Themennamen enthält? Ich weiß nicht, ob „Post Name“ etwas ist oder ob das tatsächlich der Themenname ist?

Ich habe versucht, den Code selbst zu ändern, aber ich verstehe derzeit nicht, wie die Tabellen zusammenarbeiten, da das Ergebnis 0 Ergebnisse anzeigte, anstatt nur die gleiche Anzahl von Datensätzen, aber mit Wörtern und nicht mit IDs.

Das ist kein Problem. :slight_smile: Wenn Sie im Daten-Explorer nachsehen, werden category_id und topic_id (und viele andere) automatisch in nutzbare Links innerhalb der Seite umgewandelt. Wenn Sie jedoch exportieren, um sie woanders zu analysieren, können Sie stattdessen die Kategorienamen und Themenüberschriften verwenden:

-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2024-12-31


WITH tag_names AS (

    SELECT
        t.id AS 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
    WHERE t.created_at BETWEEN :start_date AND :end_date
    GROUP BY t.id
    ),

user_count AS (

    SELECT
        p.topic_id,
        COUNT(DISTINCT p.user_id) AS users
    FROM posts p
      JOIN topics t ON t.id = p.topic_id
    WHERE t.created_at BETWEEN :start_date AND :end_date
      AND t.deleted_at IS NULL
      AND p.deleted_at IS NULL
      AND t.archetype = 'regular'
      AND p.post_type = 1
      AND p.user_id > 0
    GROUP BY p.topic_id

)

SELECT
    c.name AS category_name,
    t.title,
    tn.tags,
    t.posts_count,
    uc.users
FROM topics t
  JOIN tag_names tn ON tn.topic_id = t.id
  JOIN user_count uc ON uc.topic_id = t.id
  JOIN categories c ON c.id = t.category_id
WHERE t.created_at BETWEEN :start_date AND :end_date
  AND t.archetype = 'regular'
  AND t.deleted_at IS NULL
ORDER BY t.category_id, t.title
1 „Gefällt mir“