Newsgroup: it.comp.www.php
Titolo: ORDER by id dove id è una stringa di soli numeri

Ciao a tutti
so  che mi direte di andare nel forum mysql ma vi sarei grato se mi aiutaste 
lo stesso
ho un altro problema in una query mysql che funzionava bene fino a che ho 
voluto aggiungere order by id
la query semplificata vč:
$query="Select * from $database order by id";
il problema salta fuori forse dal fatto che id č una stringa ma che contiene
solo numeri
Per es:
"0101"
"0102"
"0301"
"0502"
"0203"
"0105"
"0306"
"0506"
"1001"
"0205"
Questi numeri "stringa" sono composti sempre da 4 cifre e vanno da "0101" a
"9999"
mysql mi torna i record nell'ordine naturale
Cosa devo fare perchč siano in ordine numerico?
ovvero:
0101
0102
0201
0202
0301
0302
eccc.....
Grazie

 
Fai un cast del campo: 
http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html
oppure, select... order by id + 0;
	Francesco

 ha scritto nel messaggio 
news:fnccpt$it7$1...@newsserver.cilea.it...

è uguale a prima
E se cambiassi sulla tabekka  il campo id da char a numero???? 

Cosa devo fare perchè siano in ordine numerico?
Per i numeri left-padded, l'ordine naturale E' l'ordine numerico. Cioe',
0101 viene prima di 0102.
Non e' cosi' solo se i numeri NON sono left-padded... allora prima viene
107 e dopo viene 17. Ma fra 0107 e 0017, il secondo viene prima sempre.
Se il campo e' definito CHAR(4), non devi fare altro, a parte verificare
che il contenuto sia davvero "0017" e non "17".
Altrimenti fai un casting a intero... e questo non ti risolve affatto il
VERO problema, che e' che tu pensi che i dati siano in un modo, e invece
sono in un altro.
Leonardo
-- 
While ordinarily valid that being widespread does not make a statement
true, I feel that the diffusion of anti-evolutionary beliefs does pose
a strong argument for Darwin having been, indeed, sorely mistaken.


I numeri sono sempre full padded e di conseguenza sono anche left padded 
sempre perche gli 0 ci sono sempre
Io pensavo come te ma l'ordine IRDER by ID non funziona
Sulla tabella gli id sono:
"0101"
"0102"
"0201"
"1001"
"0401"
"0502"
e me li lascia così invece di mettere "1001" per ultimo

 
Cosa dirti, l'ho sempre fatto e ha sempre funzionato! Per esempio se fai 
un select id + 1 from tabella; cosa torna? L'id puro oppure l'id 
numerico aumentato di 1?
	Francesco

e me li lascia così invece di mettere "1001" per ultimo
Allora l'ordine numerico e' 0101-0102-0201-0401-0502-1001.
L'ordine alfabetico sarebbe 0101-0102-0201-0401-0502-1001.
L'ordine "unpadded" sarebbe 1001-0101-0102-0201-0401-0502.
Tu pero' sopra dici che hai 0101-0102-0201-1001-0401-0502.
Direi quindi che l'ORDER in funzione sia un altro... forse
nessun ordine. O hai delle opzioni esoteriche in MySQL - o
il codice PHP e' bacato.
mysql> CREATE TABLE elenco ( x char(4), y varchar(4), z integer );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO elenco VALUES
('0101','0101',0101),('1001','1001',1001),('0401','0401',0401);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select x from elenco order by x;
+------+
| x    |
+------+
| 0101 |
| 0401 |
| 1001 |
+------+
3 rows in set (0.00 sec)
mysql> select y from elenco order by y;
+------+
| y    |
+------+
| 0101 |
| 0401 |
| 1001 |
+------+
3 rows in set (0.00 sec)
mysql> select z from elenco order by z;
+------+
| z    |
+------+
|  101 |
|  401 |
| 1001 |
+------+
3 rows in set (0.00 sec)
mysql> select x from elenco order by CONCAT('',z);
+------+
| x    |
+------+
| 1001 |
| 0101 |
| 0401 |
+------+
3 rows in set (0.00 sec)
mysql> select x from elenco;
+------+
| x    |
+------+
| 0101 |
| 1001 |
| 0401 |
+------+
3 rows in set (0.00 sec)
