php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
hierarchische Daten abfragen


 
lx-club
10-06-2013, 00:54 
 
Hallo,

meine Tabelle hat folgenden Aufbau:


id | name | image | parent_id
1 | xx | xxx | 0
2 | xx | NULL | 1
3 | xx | NULL | 2


Die Spalte image ist nur gefüllt, wenn parent_id = 0 ist, also auf oberster Ebene. Auf den unteren Ebenen soll das Bild aus der obersten Ebene verwendet werden.
Gibt es eine Abfrage, mit der man (egal auf welcher Unterebene man sich befindet) das Bild der obersten Ebene bekommt?

Mit dieser Abfrage klappt es für die 3. Ebene, aber ich brauchte es dynamisch, also egal auf welcher Ebene man ist.

select t1.name,t2.name,t3.name from table t1
inner join table t2 on t1.id = t2.parent_id
inner join table t3 on t2.id = t3.parent_id

 
mermshaus
10-06-2013, 01:40 
 
Eine elegante Lösung für genau das Teilproblem für dieses Schema (Adjazenzliste) weiß ich spontan nicht.

Aber vielleicht mal im Kontext überlegt: Liest du nicht an anderer Stelle sowieso aus irgendeinem Grund die gesamte Baumstruktur vom aktiven Element bis zum Root-Element aus?

Ansonsten könntest du wohl Nested Sets nutzen (auch ungeachtet dieses speziellen Problems keine schlechte Idee). Damit wärst du die Notwendigkeit zur Rekursion los.

- https://de.wikipedia.org/wiki/Nested_Sets

Naiv gesagt: Du kannst es auch mit rekursiven Queries in PHP lösen. Elegant ist dann zwar wirklich anders, aber ich schätze es als ganz realistisch ein, dass das nicht der Aspekt sein wird, der sich am schlimmsten auf die Performance auswirken wird.

 
lx-club
10-06-2013, 22:05 
 
Hi,

also die Baumstruktur habe ich tatsächlich ausgelesen, aber nicht die gesamt, sondern nur den Teil, der in der Navigation zu sehen ist.

Dein Tip mit dem einlesen der gesamten Struktur habei hc erstmal umgesetzt. Ich setze das Bild in jeder Ebene nur, wenn es nicht leer ist. Ansonsten wird das Bild der vorherigen Ebene (also des vorherigen Duchlaufs) genommen.

 
Yaslaw
10-06-2013, 22:40 
 
Ist mit einem Adjacency Tree nicht ganz einfach

Yaslaw.Info: [MySQL] Hierarchie Baum (Adjacency Tree) auslesen (http://wiki.yaslaw.info/wikka/MySQLTree#simpleList)

 
lx-club
10-06-2013, 22:52 
 
Danke für den Hinweis, werde ich mir mal ansehen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:08 Uhr.