PHP&MYSQL - Sortera decimal-nummer

Permalänk
Medlem

PHP&MYSQL - Sortera decimal-nummer

Jag har en databas där ett medelvärde finns med, omfånget är 1-5 med ett gång decimaler. Ett exampel på tal är: 4.38291

Cellen där dessa tal ligger är VARCHAR.

Jag vill skriva ut talen via en WHILE-loop. Fast Om jag väljer ORDER BY talet DESC. Så skriver den inte ut de tal som har decimaler, utan bara de som är jämna nummer. Hur kan jag ändra för att den ska skriva ut de i storleksordning (DESC) så att även de med decimaler finns med?

Tack på förhand!

Permalänk

Re: PHP&MYSQL - Sortera decimal-nummer

Citat:

Ursprungligen inskrivet av Hoomie
Jag har en databas där ett medelvärde finns med, omfånget är 1-5 med ett gång decimaler. Ett exampel på tal är: 4.38291

Cellen där dessa tal ligger är VARCHAR.

Jag vill skriva ut talen via en WHILE-loop. Fast Om jag väljer ORDER BY talet DESC. Så skriver den inte ut de tal som har decimaler, utan bara de som är jämna nummer. Hur kan jag ändra för att den ska skriva ut de i storleksordning (DESC) så att även de med decimaler finns med?

Tack på förhand!

VARCHAR hanterar väl inte siffror, utan är avsett att lagra korta textsträngar med? Jag skulle istället ha lagrat datat som floats av någon modell. Det finns kanske något fiffigt sätt att i sql:en casta om dina värden till siffror, men om inte det är ett alternativ kan du köra sorteringen i php:n. Outputta datat till en array, loopa igenom och konvertera till floats, och använd en sorteringsalgoritm (typ bubble sort eller whatever du känner för) för att skicka ut i rätt ordning.

W

Permalänk
Medlem

hmm ingen aning varför den ignorererar decimaltal, men du, varför har du varchar? Lagra som float istället, det kommer ta betydligt mindre plats i databasen, och blir samtidigt snabbare för databasen att arbeta med.
Man ska inte lagra tal som strängar, det är onödigt. Förutsatt att det inte är så att flyttal inte är tillräckligt precisa för dina behov eller nåt.

Det kan hända att felet löser sig automatiskt pga detta.

edit: jaja, snabbast var jag inte.

Permalänk
Medlem

Om du måste lagra som varchar (även om jag inte kan komma på en enda anledning själv) så kan du ju casta om till float när du plockar ut dem (funktionen floatval() i php) och sortera dem sen.

Visa signatur
Permalänk
Medlem

Om du måste spara dom som varchar i databasen, av någon märklig anledning, så kan du konvertera om talet till float i select-satsen.

Har inte testat koden mot Mysql men den borde fungera.

SELECT CAST(medeltal AS float) AS medeltal FROM mintabell ORDER BY medeltal DESC