Avatar billede x4all_dk Nybegynder
30. november 2005 - 11:47 Der er 9 kommentarer og
1 løsning

Sorter AA som Å

Jeg anvender en MySQL 4.0.x og henter nogle titler ud,
sorteret på navn. Jeg har adgang til PHP 4.0.x

Jeg skal have have "Aa" tolket "Å" i sorteringen...

Min liste ser sådan her ud:
--------------
Aarhus
Herning
København
Nr. Aastrup
Nr. Snede
Ålborg
-------------

Den ønskede liste skal se sådan ud (*)
er dem som er "flyttet" ned.

--------------
Herning
København
Nr. Snede
Nr. Aastrup (*)
Ålborg
Aarhus      (*)
-------------

Jeg ved ikke om jeg kan lave den ønskede sortering i MySQL
eller om jeg skal gøre det i PHP... hvem kan hjælpe ?
Avatar billede jackass- Nybegynder
30. november 2005 - 13:24 #1
Jeg ved heller ikke lige om du kan i MySQL, men ellers hiv dine results ind i et array og sortér dem der, så "aa" kommer efter "å".
Avatar billede Slettet bruger
30. november 2005 - 17:09 #2
SELECT felter
FROM tabel
ORDER BY felt COLLATE latin1_danish_ci
Avatar billede x4all_dk Nybegynder
01. december 2005 - 09:27 #3
Sandbox-> Kan det passe at COLLATE kun virker i MySQL >= version 4.1 ?
.. Jeg anvender desværre 4.0.18 :(
Avatar billede x4all_dk Nybegynder
01. december 2005 - 09:42 #4
Jeg har læst lidt rundt omkring og det lader til
at COLLATE først er implementeret i 4.1 ->

En metode kunne være at starte mysql med
--default-character-set=danish

Men... jeg har ikke disse rettigheder :(

Er det er som har en anden løsning :?
Avatar billede Slettet bruger
01. december 2005 - 09:46 #5
Øv, det ville ellers være den helt korrekte måde at gøre det på.
Avatar billede Slettet bruger
01. december 2005 - 09:51 #6
Der er naturligvis stadig jackass-'s forslag.

Hvis PHP ikke i forvejen er sat til dansk locale, kan du sætte dansk sorteringsorden med:

setlocale(LC_COLLATE, 'danish');
Avatar billede Slettet bruger
01. december 2005 - 10:00 #7
Eventuelt skal strengen være 'da_DK' eller måske endda 'da_DK.utf-8'

Heldigvis kan setlocale klare at modtage flere muligheder på en gang:

setlocale(LC_COLLATE, 'danish', 'da_DK');

Du kan fylde så mange på, som du har lyst til, men du er desværre nødt til at prøve dig frem for at finde den, din server understøtter.
Avatar billede x4all_dk Nybegynder
02. december 2005 - 17:05 #8
Jeg har desværre et Multi-dim array, så det er ikke helt så nemt.
(['id']['by_navn'])

Men selvom jeg så prøver med et almindeligt array, så
ser den ikke ud til at sortere det korrekt:

setlocale(LC_COLLATE, 'danish', 'da_DK');
$a = array ('aa', 'Aa', 'Å', 'C', 'D', 'B');
sort($a,SORT_STRING);
print_r($a);

Giver:
Array ( [0] => Aa [1] => B [2] => C [3] => D [4] => aa [5] => Å )

Men ... "Aa" er fejlagtigt forrest!!! Det lugter som en fejl i PHP's sort
ved dansk sprog.
Avatar billede Slettet bruger
03. december 2005 - 10:03 #9
Eller også er det fordi systemets danske locale har et andet navn. Det kan nemlig variere en hel del fra system til system, hvilke navne de forskellige locales har.

Andre muligheder er:
da_DK.iso8859-1
da_DK.ISO8859-1
da_DK.iso-8859-1
da_DK.ISO-8859-1
da_DK.UTF8
da_DK.utf8
da_DK.UTF-8
da_DK.utf-8

Det er lidt af et gedemarked at finde rundt i. Dem med iso kan forresten også hedde -15 til sidst.

Og egentlig lugter den sortering, du oplevede, mere som en sortering efter ASCII-værdier end som en fejlagtig dansk-sortering. I ASCII er A-Z nemlig før a-z og ÆØÅæøå kommer endnu længere henne.
Avatar billede x4all_dk Nybegynder
04. december 2005 - 17:52 #10
Ok.

Sandbox tak for dine gode svar!

Jeg tror jeg forsøger at få opgraderet mysql fra 4.0 til 4.1 :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester