MySQL: PHPs natsort () i MySQL

Opp til flere ganger har folk spørt meg om jeg har en løsning på naturlig sortering på tall i MySQL-tabeller. Dette er egentlig et problem som er veldig enkelt å unngå. Det skal lite til, og har du det slik det burde være så er det ikke et problem i det heletatt.

Problemet er at det blir en ikke naturlig sortering på tall, og det blir problemer med at 10 kommer før 2 osv. Først om hvordan man kunne ha ungått problemet, og så om hvordan man kan løse det når det er oppstått.

Bedre føre var...
Nevnte problem skjer om du har fieldtype som VARCHAR eller annen tekst-type. Om du har feltet som en INTEGER ville ikke dette være noe problem i det heletatt, og det hadde blitt sortert etter verdi slik som faller mennesket naturlig.

Når skaden først har skjedd
Når skaden først har skjedd er det to ting du kan gjøre. Du kan enten kjøre en ALTER på feltet og gjøre det om til INTEGER, eller du kan kjøre MySQLs CAST()-funksjon i spørringen. Måten dette gjøres på er som følger:


SELECT
numbers
FROM
table
ORDER BY
CAST (numbers AS UNSIGNED INTEGER)
-- [ DESC / ASC ]

Da burde biffen være løst. Lykke til med sorteringen.

Innhold