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.
Wenn Sie Fragen haben, stellen Sie diese bitte unten. ![]()