ich bräuchte hilfe bei der umwandlung eines sql-queries mit subquery in einen solchen, der ohne subquery auskommt und nur joins benutzt.
grund ist der dass ich auf mysql 4.0 festgelegt bin und erst mysql 4.1 subqueries unterstützt.
einige wenige simple beispiele zur umwandlung gibt es hier:
http://dev.mysql.com/doc/mysql/en/rewriting-subqueries.html
bringt mich aber in meinem fall auch nicht so richtig weiter.
davon abgesehen würde ich auch richtige (LEFT) JOINs statt deren uralt-schreibweise bevorzugen. das klappt im prinzip, aber nicht im speziellen.
hier das gute stück:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
SELECT id, parent_id, title
FROM table
WHERE parent_id = 0
OR parent_id = (
SELECT parent_id
FROM table
WHERE id = %s
)
ORDER BY id ASC;
|
wobei %s meine substitutionsvariable ("platzhalter") ist und da ne zahl reinkommt.
IN würde ich benutzen, das haut aber schätzungweise mit nem subquery (den ich ja eh nicht benutzen kann) als eins von mehreren elementen vermutlich sowieso nicht hin.
die tabelle sieht in etwa so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
+----+-----------+----------------------------+
| id | parent_id | title______________________|
+----+-----------+----------------------------+
| 1 | ________0 | Level 0, no Branch, Item A |
| 2 | ________0 | Level 0, no Branch, Item B |
| 3 | ________0 | Level 0, no Branch, Item C |
| 4 | ________0 | Level 0, no Branch, Item D |
| 5 | ________1 | Level 1, Branch 1, Item A |
| 6 | ________1 | Level 1, Branch 1, Item B |
| 7 | ________1 | Level 1, Branch 1, Item C |
| 8 | ________2 | Level 1, Branch 2, Item A |
| 9 | ________2 | Level 1, Branch 2, Item B |
+----+-----------+----------------------------+
|
es soll auch nur zwei level geben, es kann also nur in zwei dimensionen verschachtelt werden.
ich hoffe, hier treibt sich der eine oder andere rum, der mir da weiterhelfen kann.