Hallo,
ich benutze Nested Sets in einem WWS für die Warengruppen. Nun habe ich das Problem, dass ich für die einzelnen Gruppen wissen muss, welcher übergeordneten Gruppe sie angehören. Da diese aber in der DB nicht mitgespeichert wird, weiß ich nicht, wie ich sie innerhalb des SQL-Statements auslesen kann. Ich habe es zwar geschafft, die Zuordnung während der Verarbeitung der Daten mit PHP auszuwerten, jedoch würde mich interessieren, wie man das mit SQL während der Abfrage lösen kann.
DB-Struktur (vereinfacht):
ID (INT, AI)
rechts (INT)
links (INT)
bez (VARCHAR)
Das SQL-Statement ist das übliche
Das Notlösung mit PHP sieht so aus:
Alternativ habe ich noch eine andere Lösung für andere Zwecke.
Beide funktionieren soweit gut, aber es ist nicht das, was ich für die Zukunft benötige. Gibt es also eine Möglichkeit, die "Vater" bzw. "Parent" ID eines DS innerhalb der SQL-Abfrage herauszufinden?
Interessant wäre ebenfalls, ob man die genaue Stuktur auslesen kann. Angenommen, das Nested Set besteht aktuell aus 7 Ebenen. Wäre es dann möglich, die genaue Zugehörigkeit zu allen Überebenen auszulesen?
Z. B.:
Wenn ich nun wissen will, wem der DS mit der ID 7 gehört, gleich während der Abfrage die einzelnen Zugehörigkeiten auslese. So wären dies bei der ID 7 z. B.
ebene1: 1
ebene2: 3
ebene3: 5
ebene4: 6
Aber das ist nur so nebenbei. Mein Hauptproblem bezieht sich lediglich auf die Übergeordnete Gruppe.
Vielen Dank im Vorraus, sofern mir jemand helfen kann.
ich benutze Nested Sets in einem WWS für die Warengruppen. Nun habe ich das Problem, dass ich für die einzelnen Gruppen wissen muss, welcher übergeordneten Gruppe sie angehören. Da diese aber in der DB nicht mitgespeichert wird, weiß ich nicht, wie ich sie innerhalb des SQL-Statements auslesen kann. Ich habe es zwar geschafft, die Zuordnung während der Verarbeitung der Daten mit PHP auszuwerten, jedoch würde mich interessieren, wie man das mit SQL während der Abfrage lösen kann.
DB-Struktur (vereinfacht):
ID (INT, AI)
rechts (INT)
links (INT)
bez (VARCHAR)
Das SQL-Statement ist das übliche
Code:
SELECT g2.*, COUNT(*) AS level FROM wws_warengruppen AS g1, wws_warengruppen AS g2 WHERE g2.links BETWEEN g1.links AND g1.rechts GROUP BY g2.links
PHP-Code:
while($M=mysql_fetch_object($rs)) {
$allids[]=$M->id;
if ($M->level>1) {
$im["{subid}"]=$M->id;
$im["{subtitel}"]=$M->bez;
if ($M->level>$oldlevel && $M->level>2) {
$im["{parentid}"]=$oldsubid[$M->level-1];
$ausgabe["{subs}"].=loadtpl('./templates/subs.tpl',$im);
$oldsubid[$M->level]=$M->id;
} else {
++$cnt;
if ($cnt==1 || $M->level==2) { $im["{parentid}"]=$allids[0]; }
$ausgabe["{subs}"].=loadtpl('./templates/subs.tpl',$im);
$oldlevel=$M->level;
$oldsubid[$M->level]=$M->id;
}
$oldgid=$M->gid;
}
}
PHP-Code:
if ($M->level>1) {
$im["{subid}"]=$M->id;
$im["{subtitel}"]=($M->level==1) ? '<b>'.$M->bez.'</b>' : $M->bez;
if ($M->level>$oldlevel && $M->level>2) {
$im["{oldsubid}"]=$oldsubid[$M->level-1];
$ausgabe.=loadtpl('./module/wws/templates/add_menue_subsub.tpl',$im);
$oldsubid[$M->level]=$M->id;
} else {
$ausgabe.=loadtpl('./module/wws/templates/add_menue_sub.tpl',$im);
$oldlevel=$M->level;
$oldsubid[$M->level]=$M->id;
}
$oldgid=$M->gid;
}
Interessant wäre ebenfalls, ob man die genaue Stuktur auslesen kann. Angenommen, das Nested Set besteht aktuell aus 7 Ebenen. Wäre es dann möglich, die genaue Zugehörigkeit zu allen Überebenen auszulesen?
Z. B.:
Code:
1: 1 2: -1.1 3: -1.2 4: --1.2.1 5: --1.2.2 6: ---1.2.2.1 7: ----1.2.2.1.1 8: -1.3 ....
ebene1: 1
ebene2: 3
ebene3: 5
ebene4: 6
Aber das ist nur so nebenbei. Mein Hauptproblem bezieht sich lediglich auf die Übergeordnete Gruppe.
Vielen Dank im Vorraus, sofern mir jemand helfen kann.
Kommentar