Avatar billede cvpcvp Nybegynder
20. januar 2004 - 15:52 Der er 14 kommentarer og
1 løsning

Sortering af data hentet fra mySql database i php

Jeg henter nogle data ud af min database på følgende måde..

$result = mysql_query("SELECT * FROM table ORDER BY temp ASC");

mit problem er at de ikke bliver sorteret som jeg ønsker det....

de værdier der er i temp kan være f.eks. være følgende:
1.7
2.1
2.2
2.10
2.11
o.s.v

mit problem er at når jeg henter dem ud af databasen kommer 2.10 og 2.11 til at ligge foran 2.2 hvilket jeg ikke ønsker..

er der er løsning på det?
Avatar billede jesperhaun Nybegynder
20. januar 2004 - 16:00 #1
øh.. 2.10 er mindre end 2.2. Hvis du kan beskrive logikken i det, du ønsker, kan det måske kodes. Men MySQL sorterer jo rigtigt.
Avatar billede jesperhaun Nybegynder
20. januar 2004 - 16:02 #2
ups se bort fra det sidste. Hvad er datatypen på kolonnen TEMP. Det afgører sagen.
Avatar billede jesperhaun Nybegynder
20. januar 2004 - 16:06 #3
Hvis TEMP er en tekst-type, så er 2.2 større end 2.10.

Hvis TEMP er en tal-type, så er 2.10 større end 2.2.
Avatar billede jesperhaun Nybegynder
20. januar 2004 - 16:09 #4
Undskyld jeg vrøvler. Det er forkert, hvad jeg skriver. 2.2 er altid større end 2.10, for 2.2 er det samme som 2.20.
Avatar billede tefcke Nybegynder
20. januar 2004 - 17:33 #5
Det jesperhaun prøver at sige ;), er at det afhænger af hvilken datatype din kolonne ´temp´ har i databasen. Hvilken datatype er ´temp´?
Avatar billede cvpcvp Nybegynder
21. januar 2004 - 14:39 #6
lige nu er den varchar.. men den kan godt ændres til noget andet hvis det er... men problemet er jo at som tal vil 2.2 altid være større end 2.10......
Avatar billede Slettet bruger
21. januar 2004 - 14:42 #7
Er det til versionsnumre (eller biblioteksbøger) eller andet, der skal sorteres specielt?
Avatar billede Slettet bruger
21. januar 2004 - 14:45 #8
En løsning kunne være, at splitte det op på 2 kolonner og  skrive ORDER BY felt1, felt2 (Det er ikke nødvendigt at skrive ASC, da det er standard.)
Avatar billede cvpcvp Nybegynder
21. januar 2004 - 18:18 #9
det er et paragraf stykke... dvs. 2.2 (to.to) skal komme før 2.10(to.ti) de skal gerne løses uden at splitte dem op....
Avatar billede cvpcvp Nybegynder
21. januar 2004 - 18:20 #10
og uden at ændre dataværdierne..
Avatar billede Slettet bruger
21. januar 2004 - 18:37 #11
Kan du bruge dette?

SELECT temp, LEFT(temp,INSTR(temp,'.')) AS pgf, RIGHT(temp,CHAR_LENGTH(temp)-INSTR(temp,'.')) AS stk ORDER BY pgf, stk
Avatar billede Slettet bruger
21. januar 2004 - 18:40 #12
Der mangler jo lige en tabelangivelse

SELECT *, LEFT(temp,INSTR(temp,'.')) AS pgf, RIGHT(temp,CHAR_LENGTH(temp)-INSTR(temp,'.')) AS stk FORM table ORDER BY pgf, stk
Avatar billede cvpcvp Nybegynder
29. januar 2004 - 13:45 #13
jeg har løst det ved at dele data op. det andet virkede ikke efter hensigten
Avatar billede Slettet bruger
29. januar 2004 - 22:28 #14
Var det ikke det, jeg sagde 21/01-2004 14:45:04?
Avatar billede cvpcvp Nybegynder
30. januar 2004 - 11:13 #15
jo det er sku da rigtig nok... havde jeg ikke lige set
har lagt et spørgsmål du kan svare på og få dine points...

http://www.eksperten.dk/spm/458953
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