ZodiacXP
Erfahrenes Mitglied
Folgendes ist gegeben:
Mehrere Pfade
Bad > Decke > Licht
Küche > Ofen > Licht
Ofen > Küche > Licht
(nur als Beispiel)
Passende Tabelle in mySQL
ID, parent, data, depth, left, right
1, 0, 'Bad', 0, 1, 6
2, 1, 'Decke', 1, 2, 5
3, 2, 'Licht', 2, 3, 4
4, 0, 'Küche', 0, 7, 12
5, 4, 'Ofen', 1, 8, 11
6, 5, 'Licht', 2, 9, 10
7, 0, 'Ofen', 0, 13, 18
8, 7, 'Küche', 1, 14, 17
9, 8, 'Licht', 2, 15, 16
Sequenz mit Tiefe
Küche > Ofen > Licht
Tiefe: 2
Gesucht ist eine SQL-Abfrage, die den Pfad zu der gegebenen Sequenz ausgibt.
Meine Lösung schafft es noch nicht ganz und ist auch sehr wahrscheinlich nicht die schnellste:
Problem ist insbesondere das alle Pfade angezeigt werden. Zudem soll es auch für andere gegebene Sequenzen passen bei größeren Tiefen mit ähnlicher "Redundanz":
Küche > Ofen > Abzugshaube > Licht
Küche > Abzugshaube > Ofen > Licht
(nur als Beispiel)
Mehrere Pfade
Bad > Decke > Licht
Küche > Ofen > Licht
Ofen > Küche > Licht
(nur als Beispiel)
Passende Tabelle in mySQL
ID, parent, data, depth, left, right
1, 0, 'Bad', 0, 1, 6
2, 1, 'Decke', 1, 2, 5
3, 2, 'Licht', 2, 3, 4
4, 0, 'Küche', 0, 7, 12
5, 4, 'Ofen', 1, 8, 11
6, 5, 'Licht', 2, 9, 10
7, 0, 'Ofen', 0, 13, 18
8, 7, 'Küche', 1, 14, 17
9, 8, 'Licht', 2, 15, 16
Sequenz mit Tiefe
Küche > Ofen > Licht
Tiefe: 2
Gesucht ist eine SQL-Abfrage, die den Pfad zu der gegebenen Sequenz ausgibt.
Meine Lösung schafft es noch nicht ganz und ist auch sehr wahrscheinlich nicht die schnellste:
Code:
SELECT B.`ID`, B.`data`, B.`left`, B.`right`
FROM
`sites` as A,
`sites` as B
WHERE
A.`depth` = 2
&& A.`data` = 'Licht'
&& B.`left` <= A.`left`
&& B.`right` >= A.`right`
ORDER BY B.`left`
Problem ist insbesondere das alle Pfade angezeigt werden. Zudem soll es auch für andere gegebene Sequenzen passen bei größeren Tiefen mit ähnlicher "Redundanz":
Küche > Ofen > Abzugshaube > Licht
Küche > Abzugshaube > Ofen > Licht
(nur als Beispiel)
Zuletzt bearbeitet: