SQL Abfrage zum erstellen einer Menu Hierarchie

Ryu20

Mitglied
Hi

ich habe eine Tabelle in mysql erstellt um ein menu damit aufzubauen (eine art tree)

Hier die Struktur und ein paar Beispiel Daten der Tabelle:

ID | LABEL | PARENTID

1 | Root | 0
2 | K1 | 1
3 | K2 | 1
4 | K3 | 1
5 | K1-1 | 2
6 | K1-2 | 2

wenn ich jetzt eine ID angebe möchte ich alle datensätze haben die untermenüs von dieser ID sind.

Beispiel: ID = 2 dann möchte ich folgende Daten zurück:
5 | K1-1 | 2
6 | K1-2 | 2

Beispiel: ID = 1 dann möchte ich folgende Daten zurück:
2 | K1 | 1
3 | K2 | 1
4 | K3 | 1
5 | K1-1 | 2
6 | K1-2 | 2

usw.

Ist dies überhaupt mit so einer Struktur und einer SQL Abfrage möglich?
Ich hoffe jemand kann mir helfen.

Vielen Dank schonmal
 
Hallo Ryu20,

das ist möglich.

Am einfachsten ist es wenn du eine feste Anzahl von Ebenen hast.
Dann wird die Tabelle x mal mit sich selbst verknüpft (x= Anzahl Ebenen)
 
Feste Anzahl von Ebenen habe ich nicht eingeplannt, aber vielleicht wäre das zu überlegen,

könntest du ein kleines Beispiel posten wie ich die Tabellen am besten miteinander verknüpfe? (bin leider noch nicht so fit in SQL )

Vielen Dank
 
Hallo Ryu20,

so ganz entspricht das nicht deinen Wunsch, da das Ergebnis etwas anders aussieht.

Schau es dir erstmal an:

Code:
SELECT     *
FROM         TabelleMenu LEFT OUTER JOIN
                      TabelleMenu TabelleMenu_1 ON TabelleMenu.ID = TabelleMenu_1.ParentId LEFT OUTER JOIN
                      TabelleMenu TabelleMenu_2 ON TabelleMenu_1.ID = TabelleMenu_2.ParentId
WHERE     (TabelleMenu.ParentId = 1)
 
Es gibt zumindest in Oracle eine Funktion, die eine solche Baumstruktur einer Tabelle komplett aufdröselt - mit einem Select ohne Joins.

Der Name ist mir entfallen und ob's sowas für mysql gibt, weiß ich auch nicht sicher, aber such doch mal in der Richtung, schaden kann's nicht.
 
Moin Moin
In SQL benutze ich sowas!

Es gibt ein einfaches Konstrukt, um Baumstrukturen beliebiger Tiefe abzubilden. Dazu wird eine Spalte eingefügt, in der der Schlüssel des Vorgängers eingetragen wird. Über die "CONNECT BY"-Klausel werden dann die Zeilen verknüpft. Die Pseudospalte "LEVEL" enthält die Ebene eines Objektes innerhalb der Baumstruktur.

create table mitarbeiter (
pnr number(10),
name varchar2(80),
chef_pnr number(10));

Die Pseudospalte "LEVEL" kann verwendet werden, um die Hierarchieebene optisch durch Einrückung darzustellen:

select level ,pnr, LPAD(' ',2*(LEVEL-1)) || name name, chef_pnr
from mitarbeiter
start with pnr=1
connect by prior pnr = chef_pnr;
 
Zurück