Tekst en nummers sorteren

Door 4 januari 2013Tips & Trucs

Om te sorteren in een MySQL query dan gebruiken je “order by”. Bijvoorbeeld:

ORDER BY naam ASC

Vervolgens krijg je netjes een gesorteerd rijtje, bijvoorbeeld:

  • Android
  • Android 2.2
  • Android 2.3
  • Android 3.1
  • Android 3.2
  • Android 4.0
  • Android 4.0.3
  • BlackBerry Tablet OS
  • iOS 4
  • iOS 5
  • iOS 6
  • Windows 7 Professional
  • Windows 8
  • Windows 8 Pro

Maar wanneer het gaat om nummers klopt de volgorde niet:

  • 1024 x 600
  • 1024 x 768
  • 1280 x 768
  • 1280 x 800
  • 1366 x 768
  • 1920 x 1200
  • 2048 x 1536
  • 800 x 480

De laatste hier genoemd dient bovenaan te staan. Om dit op te lossen kunnen de ABS functie van MySQL gebruiken:

ORDER BY ABS(naam) ASC

Wat het juiste resultaat geeft:

  • 800 x 480
  • 1024 x 600
  • 1024 x 768
  • 1280 x 800
  • 1280 x 768
  • 1920 x 1200
  • 2048 x 1536

Maar! Het andere rijtje klopt nu niet meer:

  • Android 3.1
  • Android
  • BlackBerry Tablet OS
  • Android 3.2
  • Android 2.3
  • Android 4.0
  • iOS 5
  • Android 4.0.3
  • iOS 4
  • Android 2.2
  • Windows 7 Professional
  • Windows 8
  • Windows 8 Pro
  • iOS 6

Om dat op te lossen kan je een combinatie van beide gebruiken, ofwel:

ORDER BY ABS(naam),naam ASC