Gültigkeitsbereiche

Hallo,

ich bin dabei ein CMS zu entwickeln , für die Menüstruktur gibt es folgende Struktur der DB-Tabelle rubrik:

rubrik_id: Hier wird die ID gespeichert ^^ zum aufrufen

id_text: Hier wird eine ID von DB Text gespeichert

text_link_name: Hier wird der Linkname gespeichert

parent_id: die ID von der Rubrik dadrüber - Anfangs-ID:0

over_id: Hiermit erzeuge ich eine gewisse reinfolge der Links unter einer
Kategorie- es ist die Id von dem Objekt dadrüber

virtuel: unsichtbar /sichtbar

menue: welches menue

So mein Ziel ist es für ein Controlcenter den kompletten Baum auszugeben und zwar in einem Array

Dazu habe ich eine rekursive Methode programmiert (sie befindet sich in der klasse rubrik). Die rekursive Methode bekommt immer eine parent_id übergeben- Dann wird die Anzahl der Links von der Rubrik dieser parent_id gezählt. Die Datensätze werden einzelnd ausgelesen und nach der richtigen Reinfolge in das Array eingefügt. Dabei wird jedesmal geprüft -ob es bei den Links eine Rubrik darunter gibt - ist dies der Fall wird die Methode nochmal aufgerufen.

function get_tree($parent_id,$ebene,$menue){
//erstmal einmal herausfinden - wieviele datensätze es gibt
$result_oben = $this->sql_result(‚SELECT * FROM rubrik WHERE
parent_id = ‚$parent_id‘ AND menue = ‚$menue‘;‘);

$zaehler = mysql_num_rows($result_oben);
if(!(mysql_result($result_oben,0,0)))
return 0;
$this->n2 = 0;
//in einer for schleife ausgeben
for($z = 0;$z
$resultat = $this->sql_result(‚SELECT * FROM rubrik WHERE parent_id = ‚$parent_id‘ AND over_id=‘$this->n2’ AND menue = ‚$menue‘;’);
$this->n2 = mysql_result($resultat,0,‚rubrik_id‘);
//in einem Array speichern: $this->tree[]=array(mysql_result($resultat,0,‚rubrik_id‘),$this->n2,mysql_result($resultat,0,‚id_text‘),mysql_result($resultat,0,‚text_link_name‘),mysql_result($resultat,0,‚parent_id‘),mysql_result($resultat,0,‚over_id‘),mysql_result($resultat,0,‚virtuel‘),$ebene);

if($this->links_darunter($this->n2)){
$this->get_tree($this->n2,$ebene+1,$menue);
}
}
if($ebene == 0)
return $this->tree;
else
return;

}


Mein Problem ist, dass vermutlich die lokalen Variablen von der aufrufenden Methode wie z.B. result_oben sich durch die aufgerufene Methode ändern. Was kann ich tun, um das zu verhindern?

MfG Sebastian

Äm, Ich kann zwar nicht viel zu deinem Problem beitragen.
Aber eine rekursive Methode zu verwenden, ist eine Mishandlung gegenüber deinen Servers.

Weil wen du vieeeelleeee Daten zu bearbeiten hast, dann verbraucht der Server mehr Speicher und der könnte nach aufbrauch des Speichers sich aufhängen.

Ich würde dies statt rekursive zu nahmen, einfach in Schleifen zu packen. Und oder die Funktion nach bedarf erst in der schleife aufzurufen, aber nicht Rekursiv!!!

Kanst ja auch die Zwischen-Produkte in Variablen zwischen Speichern.

Naja, Wolte nur das du spätter nicht verzweifelt bist, wiso es immer so lahm leuft oder so :wink:

Ich als Flirtseiten Betreiber muß immer darum kämfen um die Geschwindigkeit. Auch komplexse Schleifen machen mir schon Probleme. Und die rekursive Methoden würden meinen Server sofort bei so vielen Besuchern aufhängen.

Äm, Ich kann zwar nicht viel zu deinem Problem beitragen.
Aber eine rekursive Methode zu verwenden, ist eine Mishandlung
gegenüber deinen Servers.

Ja - das stimmt schon, aber es ist ja nur im Controlcenter. -> Es wird daher eher seltener aufgerufen. Ich glaube wenn ich das mit Schleifen mache - gibt es auch keine Probleme mit den Gültigkeitsbereichen der Variablen. Aber wie kann man das realisieren - mit der Struktur?

MfG Sebastian

PS: DANKE für die Antwort!!!