Gängige Discourse-Datentipps

Dies ist ein gutes Beispiel für ein paar Eigenheiten der Discourse-Daten, die Ihnen helfen können, genauere Ergebnisse zu erzielen, wenn Sie Ihre Abfragen erstellen.

Da die meisten Beiträge und Themen beim Löschen ‘soft-deleted’ (weich gelöscht) werden, bedeutet dies, dass sie immer noch in der Datenbank erscheinen und in benutzerdefinierten Berichtsstatistiken enthalten sein können. Daher kann es hilfreich sein, sie aus allen Ergebnissen herauszufiltern, die Sie beispielsweise für Benutzer- oder Kategorie-Statistiken abrufen möchten. In ähnlicher Weise möchten Sie möglicherweise auch persönliche Nachrichten aus Ihren Statistiken ausschließen, ebenso wie die Systembenutzer.

Hier sind ein paar Tipps, wie Sie diese herausfiltern können:

Diese SQL-Abfrage wird verwendet, um die Top 10 Benutzer (ohne Systembenutzer) zu ermitteln, die die meisten öffentlichen Beiträge erstellt haben, wobei alle Beiträge oder Beiträge aus Themen, die gelöscht wurden, ausgeschlossen sind.

-- Auswahl von user_id aus der posts-Tabelle und Zählen der Anzahl der Beiträge, die jeder Benutzer erstellt hat
SELECT 
    p.user_id,
    COUNT(p.id) AS "Post Count"
FROM posts p
  -- Left Join mit der topics-Tabelle über topic_id
  LEFT JOIN topics t ON t.id = p.topic_id
WHERE 
  -- Ausschließen von privaten Nachrichten-Themen
  t.archetype <> 'private_message'
  -- Ausschließen von Themen, die gelöscht wurden
  AND t.deleted_at ISNULL
  -- Ausschließen von Beiträgen, die gelöscht wurden
  AND p.deleted_at ISNULL
  -- Ausschließen von Whispers, kleinen Aktionsbeiträgen und Moderatorbeiträgen
  AND p.post_type = 1
  -- Ausschließen von Beiträgen, die vom Systembenutzer und Discobot erstellt wurden (user_id 0 und -1)
  AND p.user_id > 0
-- Gruppieren der Ergebnisse nach user_id 
GROUP BY 1
-- Sortieren der Ergebnisse nach der Anzahl der Beiträge in absteigender Reihenfolge 
ORDER BY 2 DESC
-- Begrenzen der Ergebnisse auf die Top 10 Benutzer mit den meisten Beiträgen
LIMIT 10

Und hier ist sie ohne die Inline-Kommentare:

SELECT 
    p.user_id,
    COUNT(p.id) AS "Post Count"
FROM posts p
  LEFT JOIN topics t ON t.id = p.topic_id
WHERE t.archetype <> 'private_message'
  AND t.deleted_at ISNULL
  AND p.deleted_at ISNULL
  AND p.post_type = 1
  AND p.user_id > 0
GROUP BY 1
ORDER BY 2 DESC
LIMIT 10

Dies ist nur eine einfache Abfrage, um die Beispiele zu demonstrieren, aber hoffentlich hilft Ihnen dies beim Einstieg in den Daten-Explorer. :+1: Wenn Sie Fragen haben, stellen Sie diese bitte unten. :slight_smile:

10 „Gefällt mir“

Meinten Sie Nachrichten hier?

irgendwelche Beiträge oder Beiträge von […]

kommt mir komisch vor.

Ich glaube nicht? Es soll vermitteln, dass Beiträge, die sich in gelöschten Themen befinden, nicht enthalten sind. Die Verwendung von Nachrichten lässt es so klingen, als ob es sich auf PMs bezieht. Aber ich werde noch einmal prüfen, wie ich es klarer beschreiben kann. :+1:


Ein weiterer Gedanke -

Die Einbeziehung von AND p.post_type = 1 könnte auch für diese hier eine gute Ergänzung sein. :thinking:

1 „Gefällt mir“

Ich dachte, es könnte daran liegen, dass es auch PMs herausfiltert, und

schließt Nachrichten, gelöschte Beiträge und Beiträge aus gelöschten Themen aus.

Das ergibt für mich mehr Sinn als

Ausschließen von Beiträgen oder Beiträgen aus Themen, die gelöscht wurden.

Wenn ich es jetzt noch einmal lese, verstehe ich, was die ursprüngliche Absicht war, also ist es da, nur nicht so klar, wie ich es erwartet hatte, nehme ich an. :person_shrugging:

1 „Gefällt mir“