mysql, Sortierproblem
John A.
- datenbank
Ich habe ein Sortierproblem und zwar meine einzelnen Datensätze kann man über das Feld SORT sortieren
Datensatze
id titel sort
0 ALLES 0
1 titel1 1
2 titel2 2
3 titel3 0
SELECT * FROM TABLE ORDER BY SORT= 0,SORT ASC, id ASC
Die Ausgabe wäre dann
1 titel1 1
2 titel2 2
0 ALLES 0
3 titel3 0
soweit ok,
ich möchte aber der erste Datensatz (ALLES), der mit der id=0, immer an erster Stelle steht.
Für einen Tipp wäre ich dankbar
John
Hi,
ich möchte aber der erste Datensatz (ALLES), der mit der id=0, immer an erster Stelle steht.
Die, bei denen sort=0 ist, ganz nach hinten sortieren zu lassen, bekommst du hin – aber wenn sort
durch id
ersetzt wird und sich die Sortierrichtung ändert, dann hast du plötzlich vergessen wie es gehen könnte …?
MfG ChrisB
Hi John,
ich möchte aber der erste Datensatz (ALLES), der mit der id=0, immer an erster Stelle steht.
Für einen Tipp wäre ich dankbar
Nun
ORDER BY erstnachspalte1, dannnachspalte2 ;
ASC ist aufsteigend (default - musst nicht schreiben)
DESC ist absteigend
NULLS FIRST am anfang
NULLS LAST am ende
probier doch mal aus:
SELECT * FROM TABLE ORDER BY id NULLS FIRST, SORT;
Viele Grüße aus LA
Tach!
NULLS FIRST am anfang
NULLS LAST am ende
Das ist aber keine MySQL-Syntax. Zumindest steht da nichts auf der Seite zu SELECT. Und NULL ist auch nicht 0.
probier doch mal aus:
SELECT * FROM TABLE ORDER BY id NULLS FIRST, SORT;
Mein Vorschlag ist, das erste Sortierkriterium sollte so lauten: IF(id = 0, 0, 1). Damit entstehen zwei Mengen, die mit der id=0 und "der Rest". Im Prinzip reicht ein Typecast nach Boolean, gibts aber nicht. SIGN(id) tut es in dem Fall sicher auch. Negative Werte für die id gibt es vermutlich nicht, so dass SIGN() nur 0 für die id 0 und in allen anderen Fällen 1 ergibt. Diese lassen sich dann mit einem zweiten Sortierkriterium (und gegebenenfalls weiteren) in die gewünschte Reihenfolge bringen.
dedlfix.
Hi,
Das ist aber keine MySQL-Syntax. Zumindest steht da nichts auf der Seite zu SELECT. Und NULL ist auch nicht 0.
stimmt, deshalb „mal ausprobieren“ ;-)
ist Oraclezeug
Mein Vorschlag ist, das erste Sortierkriterium sollte so lauten: IF(id = 0, 0, 1). Damit entstehen zwei Mengen, die mit der id=0 und "der Rest". Im Prinzip reicht ein Typecast nach Boolean, gibts aber nicht. SIGN(id) tut es in dem Fall sicher auch. Negative Werte für die id gibt es vermutlich nicht, so dass SIGN() nur 0 für die id 0 und in allen anderen Fällen 1 ergibt. Diese lassen sich dann mit einem zweiten Sortierkriterium (und gegebenenfalls weiteren) in die gewünschte Reihenfolge bringen.
Kenn ich auch nicht :-(
Kannst du die Beschreibung in eine SQL - Zeile packen, dass ich den Syntax sehen kann?
Viele Grüße aus LA
Tach!
Mein Vorschlag ist, das erste Sortierkriterium sollte so lauten: IF(id = 0, 0, 1). [...] SIGN(id) tut es in dem Fall sicher auch. [...] dann mit einem zweiten Sortierkriterium (und gegebenenfalls weiteren) in die gewünschte Reihenfolge bringen.
Kannst du die Beschreibung in eine SQL - Zeile packen, dass ich den Syntax sehen kann?
ORDER BY IF(id = 0, 0, 1), sort = 0, sort, id
oder
ORDER BY SIGN(id), sort = 0, sort, id
Da die Intention hinter dem IF() im ersten Konstrukt besser zu erkennen ist als die vom SIGN() im zweiten, ist das IF() die bessere Wahl.
dedlfix.