Moin!
Tach Sven!
Die Datenbanktstruktur sieht wie folgt aus:
+-------+--------+-------+--------+
| ID | name | layer | parent |
+-------+--------+-------+--------+
| 1 | Home | 0 | 1 |
| 2 | test1 | 1 | 1 |
. . . .
. . . .
. . . .
| 38086 | test2 | 1 | 1 |
| 38087 | blabla | 2 | 1 |
+-------+--------+-------+--------+my @vars = sql(qq{
SELECT * FROM ebay_categories
WHERE parent = '$_[0]' AND ID != parent});
my $count = (@vars/4);SELECT * ist ja grundsätzlich böse - in diesem Fall aber nochmal extraböse!
Denn du verläßt dich drauf, dass dein * im SELECT immer genau 4 Spalten auswirft. Änderst du irgendwann in der Datenbank die Struktur, dann hast du hier in deinem Code ganz böse viele Anpassungsprobleme, weil du nicht mehr durch 4 teilen mußt, sondern durch die neue Anzahl von Spalten, die in der DB stecken.
Generell finde ich das gewählte Datenformat für die Speicherung der Datensätze sehr unglücklich. Ein zweidimensionales Array wäre wesentlich angemessener gewesen, eventuell auch eine Kombination aus Array und Hash (um auf die Spalten der Datenbank zuzugreifen - der Code wird wesentlich verständlicher).
Ja, dazu muß ich Dir auf jeden Fall recht geben!
ich habe mal (irgendwann früher :-))diese unterfunktion sql geschrieben, um mir den Zugriff auf die Datenbank zu vereinfachen.
so kann ich halt einfach scalar = sql($datenbankabfrage) aufrufen und die gewünschten Daten sind im array... man ist ja schreibfaul.
Sicher ist es nicht grade glücklich, das geb ich gern zu :) und ich werde das auch bestimmt demnächst mal ändern, weil's mir teils selbst auf den Sack geht... aber hier ist nochmals zu erwähnen :man ist ja faul
Das Problem ist auch, dass die Zahl 4 nicht als veränderbare Konstante definiert ist, sondern als Zahl an allen möglichen Stellen vorkommt - eventuell auch dort, wo "4" nicht die Zahl der Spalten aus dem SQL-Statement meint. Spätere Änderungen sind also durchaus problematisch.
Da stimme ich zu!
Ich gebe zu, dass das alles mit deinem Hauptproblem wenig zu tun hat, aber es ist IMO eine Frage des grundsätzlichen Stils, den man durchaus mal diskutieren sollte. Ab einem gewissen Kenntnislevel kann man sich im Programmieren eben nur noch im Stil verbessern. :)
Das ist nicht schlimm, ich hab das script nochmal durchgesehen, einige varialblenzuweisungen in schleifen vorgenommen, sodass sie beim rekursionsaufruf nicht überschrieben werden, und schon ging alles :)
Einziges was ich noch suboptimal halte ist, dass das script 54sek braucht um die 86000+ Datensätze als Baum "aufzumalen"
Aber irgendwo bekomm ich's nicht optimaler hin... Das mag evtl. daran liegen, dass ich als Dachdeckermeister nicht soviel kenne von sowas hab :)
- Sven Rautenberg
Gruß, Markus