Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   phpBB Users-Posts nachzählen (https://www.delphipraxis.net/76050-phpbb-users-posts-nachzaehlen.html)

faux 29. Aug 2006 08:59

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:
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;
Aber logischerweise geht da nichts. :mrgreen:

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:
SELECT COUNT(post_id)
FROM phpbb_posts
WHERE poster_id = x;
die Posts eines einzelnen Users zählen.
(Eigentlich alles logisch, aber nunja...)

Grüße
Faux

alcaeus 29. Aug 2006 09:19

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:
$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);
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.

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

faux 29. Aug 2006 09:36

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:

Zitat von alcaeus
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 ;)

Ja, habe ich mich auch schon öfters gefragt, ob das wirklich Vorteile bringt; denn MySQL müsste es doch egal sein, wenn man manche Felder nicht in die SELECT Liste mit aufnimmt...

Kann mir jemand erklären, was am oben genannten SQL-Query falsch ist? Der Fehler liegt "nearby" SELECT COUNT... :?

Grüße
Faux

alcaeus 29. Aug 2006 10:09

Re: phpBB Users-Posts nachzählen
 
Zitat:

Zitat von faux
Kann mir jemand erklären, was am oben genannten SQL-Query falsch ist? Der Fehler liegt "nearby" SELECT COUNT... :?

Vielleicht die Tatsache, dass mySQL erst in spaeteren Versionen (5.0?) Sub-Queries kann? ;)

Greetz
alcaeus

faux 29. Aug 2006 10:13

Re: phpBB Users-Posts nachzählen
 
Zitat:

Zitat von alcaeus
Vielleicht die Tatsache, dass mySQL erst in spaeteren Versionen (5.0?) Sub-Queries kann? ;)

:shock:
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