Ich habe hier ein Problem mit der Realisierung von Bäumen in MySQL, die schnell abgefragt werden können. Es handelt sich dabei um eine Termindatenbank bestehend aus mehrere Tabellen, unter anderem
- baum
- termine
BAUM:
- element_nr
- name
- vater_nr
TERMINE:
- termin_nr
- anlass
- option1
- option2
... etc
Der Baum kann bis zu 6 Elementen tief sein und in jedem Element sind Termine möglich. z.B. Organisation => Filiale => Subabteilung 1 => Subabteilung 2 => ...
Nun möchte ich eine Abfrage machen, die z.B. lautet:
Ich will alle Termine ab Filiale X (element_nr = 3) und deren Subabteilungen.
Mein Lösungsansatz:
zuerst alle element_nr der subabteilung mit einer in php rekursiven funktion abfragen und dieses für die hauptquery verwenden.
SELECT [feldnr] FROM baum, termine WHERE (element_nr = 2 OR element_nr = 45 OR element_nr = 234 OR ....) AND option1 = "ab" etc... AND baum.element_nr = termine.element_nr ORDER BY ...
Dies ist leider nicht gerade eine sehr schnelle query (wie sich nach EXPLAIN SELECT ... herausgestellt hat). Gibt es eine bessere Möglichkeit, oder scheitert man daran, dass Subquerys noch nicht möglich sind?
- baum
- termine
BAUM:
- element_nr
- name
- vater_nr
TERMINE:
- termin_nr
- anlass
- option1
- option2
... etc
Der Baum kann bis zu 6 Elementen tief sein und in jedem Element sind Termine möglich. z.B. Organisation => Filiale => Subabteilung 1 => Subabteilung 2 => ...
Nun möchte ich eine Abfrage machen, die z.B. lautet:
Ich will alle Termine ab Filiale X (element_nr = 3) und deren Subabteilungen.
Mein Lösungsansatz:
zuerst alle element_nr der subabteilung mit einer in php rekursiven funktion abfragen und dieses für die hauptquery verwenden.
SELECT [feldnr] FROM baum, termine WHERE (element_nr = 2 OR element_nr = 45 OR element_nr = 234 OR ....) AND option1 = "ab" etc... AND baum.element_nr = termine.element_nr ORDER BY ...
Dies ist leider nicht gerade eine sehr schnelle query (wie sich nach EXPLAIN SELECT ... herausgestellt hat). Gibt es eine bessere Möglichkeit, oder scheitert man daran, dass Subquerys noch nicht möglich sind?
Kommentar