mysql: sortiert "falsch"

mille

Erfahrenes Mitglied
hey!

Ich hab ein Problem mit der Sortierung bei mysql.
Folgende gegebenheit, die ich nur ändern möchte, wenn das Problem nur damit relativ "einfach" geklärt werden kann:
Spalte "bildname" vom typ Varchar (7).

Ich möchte die Datenbanktabelle auslesen und alle datensätze nach "bildname" sortieren. Soweit so gut - geht auch alles.
Aber die Reihenfolge bei 10 Bildern ist wie folgt:
1.jpg, 10.jpg, 2, jpg,....., 9.jpg

Als Mensch empfindet man das aber als falsch. die 10 müsste ganz hinten stehen - nur ein Computer sieht das so.
Wie kann ich die Sortierung nun so anpassen, das mysql quasi "richtig" sortiert ohne den Spaltentyp auf "int" zu ändern und die Endung extra zu speichern?

Danke für Eure Hilfe :)

MfG
 
Da die Spalte des Werts „VARCHAR“ ist, werden die dortigen Datensätze nach den Regeln von Zeichenketten geordnet. Das heißt, dass die Reihenfolge „1, 10, 2, …, 9“ vollkommen richtig ist. Würden die Datensätze jedoch numerisch geordnet, wäre die Reihenfolge „1, 2, …, 9, 10“.

Probier mal folgende Abfrage:
Code:
SELECT
        …
  FROM
        …
  ORDER BY
        (`bildname`+0)
 
pornex hat gesagt.:
Lol!

Das .

Wieso das?
Kannste mir das ma kurz bildlich darstellen?

ABer insofern schon ma danke :)

Eigentlich ist das Ganze recht logisch. Der PC sieht das - wie Gumbo schon sagte - als eine Zeichenkette. Folglich sortiert er nicht nach dem Zahlenwert, sondern quasi nach dem Alphabet. Also kommt die 10 vor z.B. der 4, da der erste "Buchstabe" - die 1 also - vor der 4 steht. Verstanden :confused:
Wenn du jetzt das Query von Gumbo benutzt, wird der Typ von VARCHAR auf INT geändert, da du darauf die Rechenoperation "+0" ausführst, so sollte das Ganze dann ohne Probleme laufen. Trotz dieser schnellen Lösung solltest du beim nächsten Mal auf jeden Fall auf korrekte Typisierung achten.
Ich hoffe, das hat deine Fragen ausreichend beantworten können :-)

Gruß
 
m0rb hat gesagt.:
... benutzt, wird der Typ von VARCHAR auf INT geändert, da du darauf die Rechenoperation "+0" ausführst, so sollte das Ganze dann ohne Probleme laufen.

Ah, das ist genau das was ich erfragen wollte :). Ich habe nämlich ver mutet das die 0 nicht dazu addiert sondern zu dem quasi "string" konkateniert wird.
Aber dann ist mir alles klar :).

Thx a lot
 
Eine andere Möglichkeit, die auch einigermaßen häufig verwendet wird, sind führende Nullen bei Zahlen die kürzer sind, als maximal möglich. Sprich 01 statt 1, wenn insgesamt nur zweistellige gibt, oder 001 und 027 wenns dreistellig wird. ;)
 
Zurück