Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2002

MySQL, order by, cast to int?

$lista = mysql_query("SELECT * FROM test ORDER BY test.tabel1");

Detta ger mig:

1
10
2
20
3

jag vill ha:

1
2
3
10
20

Efter lite googlande har jag förståt det som att jag ska göra en cast till int men får inte till det. Tacksam för hjälp.

Edit:

$lista = mysql_query("SELECT * FROM test ORDER BY CAST(test.tabel1 AS SIGNED)");

Vad är skillnaden mellan SIGNED och UNSIGNED?

Livets 3 pelare:
SEX, MAT & KAFFE.

Trädvy Permalänk
Medlem
Plats
Laholm
Registrerad
Okt 2005

Lol. Gör om tabellen helt. Man ska INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE spara tal som char/varchar.

ASP.NET programmerare i C#
Twitter: http://www.twitter.com/hagbarddenstore

Trädvy Permalänk
Medlem
Plats
KNA
Registrerad
Mar 2005

Skulle det går inte bara att ta order by sum ?

NEW ::i7 920 || GTX 295 1792MB || 1600MHz 6GB ||P6T Deluxe V2 || P182 || NH-U12P || TX 850W - LG - W3000H LCD MONITOR
--------
OLD :: X2 4400+ @ 2420Mhz x11 || Corsair TWINX2048-3200C2 @ 220Mhz || A lot of HDD-space ;) || A8N-SLI Premium || 6800GT Leadtek || OCZ 520 Modstream || - KÖPA ?

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003
Citat:

Ursprungligen inskrivet av Lurcazzus
$lista = mysql_query("SELECT * FROM test ORDER BY test.tabel1");

Detta ger mig:

1
10
2
20
3

jag vill ha:

1
2
3
10
20

Efter lite googlande har jag förståt det som att jag ska göra en cast till int men får inte till det. Tacksam för hjälp.

Edit:

$lista = mysql_query("SELECT * FROM test ORDER BY CAST(test.tabel1 AS SIGNED)");

Vad är skillnaden mellan SIGNED och UNSIGNED?

Kallar du tabellen för test och kolumnen för tabel1? Blir lite förvirrande när man ska hjälpa.

Problemet med din SQL-sats är att mysql sorterar värden alfabetiskt, för att värdet är en sträng. Jag tror att den ska se ut på detta vis:

SELECT tabel1 FROM test ORDER BY ABS(tabel1) ASC;

Skillnaden mellan SIGNED [INTEGER] och UNSIGNED [INTEGER] är att en SIGNED är negativt ändligt tal till ett ändligt positivt tal. UNSIGNED är från 0 till ett ändligt tal.

signed int = -2147483648 till 2147483647
unsigned int = 0 till 4294967295

Citat:

Ursprungligen inskrivet av hagbarddenstore
Lol. Gör om tabellen helt. Man ska INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE spara tal som char/varchar.

Varför inte? Ska inte matematiska beräkningar göras med värdena så spelar det ingen roll. Telefonnummer, personnummer, etc.

Edit: Skrev lite mer utförligt.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2002
Citat:

Ursprungligen inskrivet av hagbarddenstore
Lol. Gör om tabellen helt. Man ska INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE INTE spara tal som char/varchar.

Jag använde ett excel -> mysql program för att få ut massa värden och den var dum nog att lägga det i varchar, upptäckte problemet nu. Så lärt mig lite mer :).

Livets 3 pelare:
SEX, MAT & KAFFE.