Sortieren

MArc

Erfahrenes Mitglied
MySQL: Sortieren

Hallo zusammen,

ich habe da ein Problem bei dem ich einfach nicht weiter komme.

Folgender bestand:

Ich habe eine Tabelle mit 2 spalten (also alles nur mal beispiel)
aufbau so:

ID1 . . . ID2
1 . . . . . 0
2 . . . . . 0
3 . . . . . 0
4 . . . . . 2
5 . . . . . 2
6 . . . . . 0
7 . . . . . 3


Und zwar möchte ich das es Sortiert wird. Aber nicht das "normale" sortieren sonder wie in _gruppen_ sortieren.
Oh man, verflickst. Verdammt schwer zu erklären.
Ganz einfach: Ich weiß durch die ID2 zu welcher ID1, der jenige gehört, der bei ID2 keine 0 hat.
Und so sollte das resulstat sein.

ID1 . . . ID2
1 . . . . . 0
2 . . . . . 0
4 . . . . . 2
5 . . . . . 2
3 . . . . . 0
7 . . . . . 3
6 . . . . . 0

Wieso?: Weil 4 und 5 die ID2=2 haben gehören die demjenigen der ID1=2 hat. Also sollte dann nach ID=2 aufgelistet werden
Und bei 7 weil von dem die ID2=3 ist gehört es der ID1=3.

Und wenn ich dann zbs. noch einen habe der ID1=8 und ID2=7 hat soll der wieder nach der ID1=7 kommen.

Geht das mit SQL. Also ich verzweifle hier.

Gruss,
MArc

/edit: Hab nen Fehler korrirgiert
 
Zuletzt bearbeitet:
Hallo,

ne habs ausprobiert der gibt mir trotzdem alles so aus:
ID1 . . . ID2
1 . . . . . 0
2 . . . . . 0
3 . . . . . 0
4 . . . . . 2
5 . . . . . 2
6 . . . . . 0
7 . . . . . 3

Gruss,
MArc
 
also ich habs jetzt auch ausprobiert, bei mir sortiert er's so wie du's haben willst:
Code:
select * from tabelle order by if(id2=0,id1,id2);
id1  	id2
1  	0
2 	0
4 	2
5 	2
3 	0
7 	3
6 	0
 
ah, habe vergessen das "*" weg zu machen.

Aber was ist wenn
ID1 . . . ID2
1 . . . . . 0
2 . . . . . 0
3 . . . . . 0
4 . . . . . 2
5 . . . . . 2
6 . . . . . 0
7 . . . . . 3
8 . . . . . 4 -> Das wird dann nicht sortiert - Das sollte ja dann eigentlich nach ID1=4 kommen (?)

Wieso sortiert er das dann nichtmehr?
 
na das wird aber schon richtig kompliziert dann. das ist ja das kind von nem kind, also die 2. verschachtelungstiefe. das kann sich ja dann theoretisch unendlich weiter verschachteln.

mir war nicht klar, dass das über die 1. stufe hinausgeht und ich kann mir momentan auch nicht vorstellen wie man das in sql lösen könnte.
 
ja das war mein hauptproblem.

Das sollte ein Menü baum werden. Und der User bestimmt frei welches menü von einem anderen das untermenü ist.
Also sprich: Ein menü punkt kann unendlich untermenüs haben und das untermenü wieder untermenüs usw. bis es keine untermenüs mehr gibt.....

Ich probier schon die ganze Zeit rum, aber ich glaube auch nicht das, das _nur_ mit SQL geht.

Falls du trotzdem noch ne Idee hast, als her damit ;)
Aber aufjedenfall mal Danke.

Gruss,
MArc

//edit: ein paar logik-fehler behoben
 
Zuletzt bearbeitet:
Das Problem ist, dass deine Anfrage rekursiv abgearbeitet werden muss. Das ist im Prinzip mit dem ANSI SQL Standard nicht lösbar ohne viele einzelne Statements, leider.
Manche Datenbanksystem haben deshalb etwas proprietäres entwickelt.
Ich kann jetzt nicht sagen ob es in MySQL sowas gibt, aber Oracle hat z.B. ein "Connect By" Statement mit dem ich rekursives SQL ausführen kann und sogar innerhalb der einzelnen Gruppen sortieren kann.

Sieht dann z.B. so aus:
Code:
SELECT *
FROM myTABLE
START WITH ID2=0
CONNECT BY PRIOR ID1 = ID2 
ORDER SIBLINGS BY ID1
 
Nabend,

vielen Dank für eure mühe. Wie es aussieht funktioniert das wirklich nicht _nur_ mit MySql.
Naja, ich habe es nun mit php gemacht. Ist zwar komplizierter aber es funktioniert.

Danke nochmal,

Gruss,
MArc
 

Neue Beiträge

Zurück