24. august 2007 - 11:11Der er
9 kommentarer og 2 løsninger
ORDER BY på felt med bogstaver og tal
Hejsa Jeg skal lave en sortering på et felt som både har bogstaver og tal(feks. "test 25"), og dette giver mig nogle problemer. Når jeg gør følgende: select * from ct_contact where ct_name1 like 'test%' order by ct_name1 Får jeg denne sortering ud: Test 1 Test 10 Test 11 Test 12 Test 13 Test 14 Test 15 Test 16 Test 17 Test 18 Test 19 Test 2 Test 20 Test 21 Test 22 Test 3 Test 4 Test 5 Test 6 Test 7 Test 8 Test 9
Og jeg ønsker: Test 1 Test 2 Test 3 ... Test 9 Test 10 Test 11 ... Test 19 Test 20 Test 21
Hvad gør jeg galt.. Det er sikkert temlig simpelt..
Så længe, du har defineret feltet som alfanumerisk, kan du ikke komme ud over dette uden større krumspring.
Den alfanumeriske sortering giver nemlig nøjagtig den sortering.
Hvis du altid har feltet bygget op med "Test <tal>", kan du lave et beregnet felt, som klipper "Test " fra og omdanner resten til numerisk og derefter sortere på dette. Alternativt er at lave et felt med sorteringsnøgle og vedligeholde dette også.
det tror jeg ikke umiddelbart du kan, medmindre du VED at teksten fra position 6 og fremefter består af tal, da det ellers er en korrekt sortering MySQL laver.
Alternativt kan du bruge "Test 01" istedet for "Test 1" (evt. "Test 1").
Da feltet er alfanumerisk (blandet tal og tegn), så får du sorteringen alfanumerisk - altså et tegn ad gangen, begyndende fra venstre side.
Jeg ser to muligheder: - Du kan ændre i de data der sorteres på. - Du kan ændre i sorteringen.
. Hvis du vil/kan ændre i data der sorteres på, så skal du sørge for at der er foranstillede nuller - d.v.s. "Test 1" bliver til "Test 01". Du skal sørge for at have så mange foranstillede nuller som der "nogensinde" kan blive brug for tal.
. Hvis du vil ændre i sorteringen, så kræver det at du ved hvad der står i feltet af tekst. Hvis der altid står "Test " foran, så er det nemt: ORDER BY REPLACE(ct_name1, 'Test ', '')
Ved du ikke hvilke tekst-stumper der ligger i feltet, så er det straks sværere. Så skal man måske lave noget med at fjerne alle tal... Nej, det bliver nok noget underligt noget.
Kan du ikke lave et lille script, der lige kører alle poster igennem og tilretter feltet. Såfremt der står et 1-cifret tal, skal der sættes et 0 foran. Og hvis du har høje tal, fx. op til 999, så skal der sættes 2 nuller foran 1-cifrede tal og 1 nul foran 2-cifrede tal.
Ja jeg tror ikke den går for i de fleste tilfælde vil der slet ikke være et tal. Så jeg tror jeg lever med sorteringen som den er nu.. Eller mange tak for forslagene..
Synes godt om
Ny brugerNybegynder
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.