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?
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:
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?
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.
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.
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.
-- [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
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. 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