Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » PHP » Rekursives Erhöhen eines Zählwertes?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.10.2005, 17:56 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Hallo,
Ich habe da so ein kleines Problem mit PHP in Kombination mit MySQL.

Ich habe eine MySQL-Tabelle, welche verschiedene Datensätze enthält. Unter gibt es dabei:
ID (BIGINT)
ParentID (BIGINT)
ReplyCount (BIGINT)

Wobei ParentID auf die ID des jeweils übergeordneten Datensatzes verweist. ReplyCount soll den Wert enthalten, wie viele untergeordnete Datensätze es gibt. Wenn ParentID = ID ist, so gibt es keinen übergeordneten Datensatz.
Eine Hierachie könnte also z.B. so aussehen:

Code:
Datensatz (ReplyCount sollte hier 4 sein)
   -> Untergeordneter (ReplyCount sollte hier 0 sein)
   -> Untergeordneter (ReplyCount sollte hier 0 sein)
   -> Untergeordneter (ReplyCount sollte hier 1 sein)
         -> Untergeordneter
Datensatz (ReplyCount sollte hier 0 sein)




Wie kann ich jetzt, wenn ich einen neuen Datensatz einfüge, den ReplyCount sämtlicher übergeordneter Datensätze um 1 erhöhen? Mir würde nur spontan einfallen, einfach so lange, bis ParentID = ID ist, jeweils eine SELECT-Abfrage zu schicken, um eben dies heraus zu finden, und danach mit UPDATE den Wert zu erhöhen... aber ist das nicht wahnsinnig ineffizient?

Gibt es da eine geeignetere Möglichkeit?
Falls es wichtig sein sollte: PHP Version ist 5.1RC0 und MySQL Version ist 5.0.7 beta

Dieser Post wurde am 07.10.2005 um 17:57 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.10.2005, 18:18 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja denke nicht das da was einfacheres gibt als immer parent-id zu prüfen ob nächsthöherer datensatz ob dessen parent-id null ist und jeweils erhöhen.

also so in der Art (Pseudo Code):


Code:
Insert into ... parentID = $parentID;
while($parentID != 0)
{
  Update ReplyCount = ReplyCount + 1 where ID = $parentID;
  $parentID = Select parentID from where ID= $parentID;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.10.2005, 18:39 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Hatte ich mir schon gedacht ... schade, weil's wohl bei einer großen Datenbank ziemlich lahmen wird.

Naja, danke jedenfalls
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.10.2005, 18:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja index auf parentID dann sollte das relativ fix gehen, vor allem da du dir auch nur parentID vom höheren datensatz holst. Achja mein Pseudocode hat nen fehler, der letzte Datensatz (also toplevel) wird nicht mehr geupdatet
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ PHP ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: