2012-03-28 10 views
1

Ich habe derzeit eine einfache MySQL-Auswahl mit einer order by auf einer Spalte namens postcodes. Diese Postleitzahlen sind UK.MySQL Sort UK Postleitzahlen

Die Ausgabe erfolgt derzeit in dieser Reihenfolge: SE1, SW1, SE10, SE11, SE2, SW2, SE3. Ich weiß, mit ABS() würde die Anzahl der Bestellung korrigieren, aber ich bin mir nicht sicher, wie ich es in diesem Fall tun würde, weil es Buchstaben sowie Zahlen gibt.

Ich mag würde sie in der folgenden Reihenfolge angezeigt:
SE1, SE2, SE3 SE10, SE11, SW1, SW2

Vielen Dank für jede Hilfe.

+0

möglich Duplikat [Natürliche Sortierung in MySQL] (http://stackoverflow.com/questions/153633/natural-sort-in-mysql) –

+1

Sie haben SW1W, EC1A etc ... vergessen, was zu weiteren Problemen führen wird ... GiroBank GIR 0AA, BFPO ... Sie können also nicht nur Zahlen verwenden. Es wäre wahrscheinlich besser, es durch Entfernung als alles andere zu tun. – Ben

Antwort

2

Sie könnten der Tabelle einige zusätzliche Spalten hinzufügen, um die darin enthaltenen Snippets zu enthalten und die Reihenfolge mithilfe der Tertiärspalten zurückgeben, nach denen sortiert werden soll. Zum Beispiel:

PostCodeTable 
|---------------------------------------------| 
|postCode| codePart1 | codePart2 | codePart3 | 
|char() | char() | int()  | whatever() | 
|---------------------------------------------| 
| SE1 | SE  | 1   |   | 
| SW1 | SW  | 10  |   | 
| SE10 | SE  | 10  |   | 
| SE11 | SE  | 11  |   | 
| SE2 | SE  | 2   |   | 
| SW2 | SW  | 2   |   | 
| SE3 | SE  | 3   |   | 
|---------------------------------------------| 

Ihre Anfrage könnte sein:

Select 
    postCode 
from 
    PostCodeTable 
order by 
    codePart1, 
    codePart2 
    // etc etc as needed. 
+0

Wie löst dies die Probleme der Distrikte, die aufgrund der Anzahl der Zustellungsstellen [http://en.wikipedia.org/wiki/London_postal_district#High-density_districts] unterteilt wurden? SW1A, SW1E, SW1H usw. – Ben

+0

@Ben Ich weiß nicht, wie viele Kombinationen von Buchstaben + Zahlen + Buchstaben + Zahlen es gibt (daher der CodePart3), aber wenn Sie sie in einzelne Gruppen teilen, können Sie leicht nach ihnen sortieren und Geben Sie den Hauptteil in der richtigen Reihenfolge zurück. – Fluffeh