Permalänk

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?

Permalänk

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.

Permalänk
Medlem

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

Visa signatur

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 ?

Permalänk
Medlem
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.

Visa signatur

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

Permalänk
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 :).