WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   mySQL/php: wie vermeide ich zuviele Queries (bitte lesen) (http://www.wcm.at/forum/showthread.php?t=108615)

Alex1 12.09.2003 16:33

mySQL/php: wie vermeide ich zuviele Queries (bitte lesen)
 
Ich schreibe gerade an einem Linkverzeichnis in php mit einer mySQL DB im Hintergrund.
Die Links sind in Kategorien eingeteilt, diese Kategorien können Subkategorien enhalten, die wiederum Links und weitere Subsubkategorien enthalten können usw.
Theoretisch also unendlich tief :)
Ich will beim browsen durch die Kategorien angezeigt bekommen:
  • Enthaltene Unterkategorien (die nächsttiefere Ebene)
  • Anzahl der Links darin (also inklusive den Links in den Sub- Subsub-...Kategorien - unendlich tief)
  • Die neu hinzugekommenen Links (wieder unendlich tief in die Kategorien reinschauen...)
  • Upgedatete Links (detto)
Ich schaffs ja schon, die oben genannten Dinge mit rekursiven Funktionen anzuzeigen und zu zählen.
Das Problem ist: die mySQL-Queries, um die Kategorien unendlich tief zu durchforsten (um eben die jeweilige Kategorie-ID herauszufinden, und dann nachzuschauen "welche Kategorie hat diese ID als ElternID"), werde ich wohl kaum vermeiden können.
Sprich: für 100 Kategorien inkl. der Unterkategorien brauche ich eben 100 Queries.
Was mich aber anzipft: jedesmal, wenn ich in einer Kategorie drin bin, setze ich wieder 3 Queries (Wieviele Links? Wieviele neue Links? Wieviele Updates?).
Kann man das einfacher machen?

Ich hoffe, ich habe das verständlich erklärt...:D

käptn 12.09.2003 16:49

Ein klarer Fall für PEAR::DB_NestedSet :)

http://pear.php.net/package/DB_NestedSet
http://ffm.junetz.de/members/reeg/DS...00000000000000

~

Alex1 12.09.2003 17:21

Hm...speziell der zweite Link ist ziemlich interessant.
Ich habe das bis jetzt so gelöst:
Alle Kategorien bekommen eine eigene, eindeutige ID und eine Eltern ID (die ID jener Kategorie, deren Tochter sie sind).
Die Kategorien in der obersten Ebene bekommen als Eltern ID "0".
Ich habe somit ein hierachisches System aufgebaut, wo ich in der obersten Ebene alle Kategorien anzeige, die als Eltern ID "0" haben, und in der nächsttieferen Ebene alle Kategorien, die Tochter dieser Kategorie oberster Ebene ist. Tiefer werden dann die Töchter ebendieser Tochter angezeigt usw.
War das falsch? :heul:

Alex1 12.09.2003 17:27

Hier noch ein Dump der Kategorientabelle
CREATE TABLE category (
category_id smallint(5) NOT NULL auto_increment,
parent_id smallint(5) NOT NULL default '0',
name varchar(100) NOT NULL default '',
description text NOT NULL,
allow_links char(3) NOT NULL default '',
PRIMARY KEY (category_id)
) TYPE=MyISAM;

käptn 12.09.2003 17:29

Ja, das klassische Parent-Child System, artet in ein rekursives Desaster aus, wenn die Tiefe der Ebenen zunimmt. :(

~

Alex1 12.09.2003 17:34

Nur, damit ichs im Klartext lese: Das heisst, ich soll das komplette Schema umstellen? :utoh:
Ich meine, der Jammer ist ja eben der: zuviele Ebenen sind ein Wahnsinn an Queries...ich schick Dir eine schnelle pm mit dem Link...


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag