AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken phpBB Users-Posts nachzählen
Thema durchsuchen
Ansicht
Themen-Optionen

phpBB Users-Posts nachzählen

Ein Thema von faux · begonnen am 29. Aug 2006 · letzter Beitrag vom 29. Aug 2006
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

phpBB Users-Posts nachzählen

  Alt 29. Aug 2006, 08:59
Datenbank: MySQL • Version: 4.1 • Zugriff über: GUI-Applikation
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.

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
Faux Manuel
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: phpBB Users-Posts nachzählen

  Alt 29. Aug 2006, 09:19
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: phpBB Users-Posts nachzählen

  Alt 29. Aug 2006, 09:36
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 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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: phpBB Users-Posts nachzählen

  Alt 29. Aug 2006, 10:09
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: phpBB Users-Posts nachzählen

  Alt 29. Aug 2006, 10:13
Zitat von alcaeus:
Vielleicht die Tatsache, dass mySQL erst in spaeteren Versionen (5.0?) Sub-Queries kann?

Jup, das kann es sein. Auf nem 5.1er gehts problemlos.

Danke, damit wäre das Problem geklärt.

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz