Numerisch UND Alphabetisch sortieren lassen
Lavender
- datenbank
0 ChrisB0 dedlfix
0 Thilo Fester
Hallo zusammen,
wenn ich eine normale Select-Abfrage bei u.g. Datensatz durchführe, sortiert er nur alphabetisch - jedoch hilft mir das ganz und gar nicht:
Mein Datensatz:
Klasse 1 | blablabla
Klasse 2 | blablabla
Klasse 10 | blablabla
Gym 1 | blablabla
Gym 2 | blablabla
Gym 11 | blablabla
...
Normale Select und Order By Ausgabe:
Gym 1
Gym 11
Gym 2
Klasse 1
Klasse 10
Klasse 2
...
Was ich jedoch unbedingt in der Datenbank Form brauche wäre
Gym 1
Gym 2
Gym 11
Klasse 1
Klasse 2
Klasse 10
...
Mit + 0 oder * 1 sortiert er zwar richtig nach der Zahl, nicht jedoch nach dem Titel davor. Ein Right/Left habe ich auch schon versucht, aber irgendwie steig ich nicht wirklich dahinter, wie dann ein Group by o.ä. aussehen müsste, damit wirklich erst nach Titel und dann nach Zahl sortiert wird.
Für eure Hilfe wäre ich sehr dankbar.
Viele Grüße
Lavender
PS: Datenbank ist eine MySql
Hi,
Was ich jedoch unbedingt in der Datenbank Form brauche wäre
Gym 1
Gym 2
Gym 11
Klasse 1
Klasse 2
Klasse 10
...Mit + 0 oder * 1 sortiert er zwar richtig nach der Zahl, nicht jedoch nach dem Titel davor. Ein Right/Left habe ich auch schon versucht, aber irgendwie steig ich nicht wirklich dahinter, wie dann ein Group by o.ä. aussehen müsste, damit wirklich erst nach Titel und dann nach Zahl sortiert wird.
Was soll GROUP BY mit der Sortierung zu tun haben?
Du muesstest den Textinhalt in zwei Werte aufsplitten (LEFT/RIGHT sind da schon passend, wenn beide Teile immer durch ein Leerzeichen getrennt sind, nimm noch INSTR o.ae. hinzu, um die "Trennstelle" zu finden) - und dann beide im ORDER BY angeben.
Aber Vorsicht, nach den Nutzerkommentaren im Manual wird das signifikant langsamer als direktes Ordnen nach einem vorhandenen Feldwert.
MfG ChrisB
echo $begrüßung;
Was soll GROUP BY mit der Sortierung zu tun haben?
Bei MySQL hat es: http://dev.mysql.com/doc/refman/5.0/en/select.html
If you use GROUP BY, output rows are sorted according to the GROUP BY columns as if you had an ORDER BY for the same columns. To avoid the overhead of sorting that GROUP BY produces, add ORDER BY NULL.
MySQL extends the GROUP BY clause so that you can also specify ASC and DESC after columns named in the clause.
Aber Vorsicht, nach den Nutzerkommentaren im Manual wird das signifikant langsamer als direktes Ordnen nach einem vorhandenen Feldwert.
Besonders dann, wenn der Feldwert einen Index hat, und die Daten damit quasi schon sortiert vorliegen.
Die vom OP gesuchte Sortiermethode heißt übrigens Natural Sort und wird von MySQL nicht angeboten, wohl aber von PHP für Arrays.
echo "$verabschiedung $name";
Hallo Lavender!
In der Form, wie Du hier eine Datenbank verwendest, ist das recht ineffizient. Ich will mich meinem Vorredner anschließen. Splitte die Nummern und die alphabetischen Werte auf und schreibe sie in verschiedene Spalten.
Wenn das ( was man ja ab und an 'mal liest) aus irgendwelchen Gründen nicht sein darf, dann könntest Du Deine Zahlen einfach so schreiben, dass sie alphabetisch gesehen ( im Sinne der ASCII-Numerierung) in eine Reihenfolge passen.
In etwa so:
Klasse 01 | blablabla
Klasse 02 | blablabla
Klasse 10 | blablabla
Gym 01 | blablabla
Gym 02 | blablabla
Gym 11 | blablabla
Dann würde die Sortierung durch ORDER BY auf die erste Spalte angwandt funktionieren, wie Du es möchtest.
Diese Art das Problem zu lösen ist allerdings höchst unelegant. Du wirst, wenn Du irgendwann einmal mehr aus Deiner Anwendung machen willst oder damit effektiv arbeiten willst, immer wieder auf Probleme stoßen, die Dir die gleichen Sorgen bereiten wie heute.
Wenn Du uns vielleicht ein paar Informationen über dein Dein Datenbankschema zukommen lässt, können wir Dir bei der richtigen Strukturierung gerne weiterhelfen, sofern Du das möchtest : )
Beste Grüße
~ Thilo