MySQL: ORDER BY in natürlicher Reihenfolge

soezkan

Erfahrenes Mitglied
Hallo zusammen,

ich bin neu im Forum und grüße alle!

Ich benutze eine MySQL-Datenbank und bin Anfänger auf dem Gebiet SQL.
Wie kann ich dem ORDER BY beibringen, meine Ergebnisse in natürlicher
Reihenfolge zu ordnen? Ich benutze zwei Tabellen um meine Daten zu speichern.
In der einen stehen die Feldnamen in der anderen stehen Werte:

Code:
table adress_values

int id
int fid
varchar value

table adress_fields

int fid
varchar description

... das ist eine abgespeckte Version

Code:
SELECT value 
FROM adress_values 
WHERE fid = 'strasse' 
ORDER BY value;

Angenommen ich möchte jetzt die Hausnummer statt dem Strassennamen (in meinem Beisp.) ausgeben lassen, dann sortiert mir MySQL das so:

1
12
122
11
2
3
4
41
42
5


Natürlich wäre es so

1
2
3
4
5
11
12
41
42
122


Wie kriege ich das hin. Leider lässt sich meine Tabellenstruktur jetzt nicht mehr
aufdröseln, da alle PHP-Routinen die darauf zugreifen feststehen.
Was tun also

1000 Dank für jeden Tipp,
Soezkan
 
Das Problem ist, dass value ein varchar - also ein Zeichen - Feld ist.

Damit ist die Sortierung so korrekt, da sie alphabetisch erfolgt.
Du kannst jetzt entweder das Feld in ein integer umwandeln oder einen Trick anwenden:

SQL:
order by value + 1

Da sollte er eigentlich value automatisch in eine Zahl umwandeln und dann nach diesen Zahlen sortieren.

Problematisch wird es, wenn es mal kein reines Textfeld mehr ist.
 
Ich habs ausprobiert und es klappt für alle Zahlen.Aber die Zeichenketten
klappen jetzt nicht mehr.
Weiss jemand wie ich in das ORDER BY ein IF oder so einsetze, dass
ich dass dann so habe wie:

Code:
ORDER BY (
Wenn: value REGEXP ('^[0-9]+$') ... Dann: value + 1
Sonst: value
) ASC

Habe nichts brauchbares bei der MySQL-Doku finden können.
Ein Beispiel würde sehr helfen!!
Danke!
Soezkan
 
Zuletzt bearbeitet:
Zurück