![]() |
Datenbank: MySQL • Version: 4.1 • Zugriff über: GUI-Applikation
phpBB Users-Posts nachzählen
Hallo!
Angenommen ich möchte die Posts aller User in einem phpBB Forum nachzählen; wie mach eich das mit einem einzigen SQL Query? Ich hab jetzt nicht vor das zu machen, sondern will nur was machen, das zufällig die selbe Datenstruktur hat. Mein Ansatz:
SQL-Code:
Aber logischerweise geht da nichts. :mrgreen:
UPDATE phpbb_users u
SET users_posts = ( SELECT COUNT(post_id) FROM phpbb_posts c WHERE c.poster_id = u.user_id ) WHERE c.user_id = u.user_id; Achja, was ich vergessen habe: Es kenn nicht alle die DB-Struktur von phpBB. :) Es gibt eine User-Tabelle (phpbb_users) mit u.a. den Spalten user_id und user_posts, wo jeder User genau einen Datensatz hat. Dann gibts da noch eine (genaugenommen zwei, aber egal) Tabellen mit den Posts (phpbb_posts). Auch hier der Primary-Key namens post_id und dann noch ein Feld poster_id der der User-ID entspricht. Hier hat jeder Post einen Datensatz. Ich will jetzt mittels
SQL-Code:
die Posts eines einzelnen Users zählen.
SELECT COUNT(post_id)
FROM phpbb_posts WHERE poster_id = x; (Eigentlich alles logisch, aber nunja...) Grüße Faux |
Re: phpBB Users-Posts nachzählen
Jenau. Du tust dich leichter, wenn du dies in mehreren Queries machst. Hier mal ein Code zum Einbau in ein ACP-Modul:
Code:
Der Code kann bei einem groesseren Forum schon mal laenger laufen. Deshalb gibt es verschiedene Scripte, die das Ganze als ACP-Modul implementieren. Da gibts dann einen Batch-Mode, so dass man bei einem eventuellen Abbruch nicht von ganz vorne anfangen muss, sondern in der Mitte anfangen kann.
$sql = 'SELECT poster_id, count(post_id) as post_count
FROM '. POSTS_TABLE .' WHERE poster_id > 0 GROUP BY poster_id'; if (!($result = $db->sql_query($sql))) { message_die(GENERAL_ERROR, 'Could not query posts table', '', __LINE__, __FILE__, $sql); } while ($row = $db->sql_fetchrow($result)) { $sql = 'UPDATE '. USERS_TABLE .' SET user_posts = '. $row['post_count'] .' WHERE user_id = '. $row['poster_id']; if (!$db->sql_query($sql)) { message_die(GENERAL_ERROR, 'Could not update user table', '', __LINE__, __FILE__, $sql); } } $db->sql_freeresult($result); Bezueglich der beiden Beitragstabellen: die Infos sind geteilt. Die Daten, die man oft benoetigt, sind in phpbb_posts, waehrend Text und BBCode-UID in phpbb_posts_text liegt. Ob das wirklich Vorteile bringt, sei dahingestellt, es ist aber nunmal so gemacht ;) Greetz alcaeus |
Re: phpBB Users-Posts nachzählen
Ja das im ACP habe ich schon gesehen, aber ich würde es eher in einem SQL-Query machen (Lerneffekt, etc.), wenn das möglich ist.
Da ich ja nicht wirklich alle Posts nachzählen will, sollte das relativ schnell gehen. ;) Zitat:
Kann mir jemand erklären, was am oben genannten SQL-Query falsch ist? Der Fehler liegt "nearby" SELECT COUNT... :? Grüße Faux |
Re: phpBB Users-Posts nachzählen
Zitat:
Greetz alcaeus |
Re: phpBB Users-Posts nachzählen
Zitat:
Jup, das kann es sein. Auf nem 5.1er gehts problemlos. Danke, damit wäre das Problem geklärt. :cry: Grüße Faux |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz