Page 1 sur 1

Probleme d'order by dans un select

Posté : 25 juil. 2005, 16:36
par Erwin
Bonjour,

J'ai un petit probleme, rien de bien grave mais cela est embétant dans l'affichage.
Je m'explique, je souhaite trié mes données de ma base de donnée en ordre croissant donc ORDER BY Reference ASC!!Mais mon champs se compose comme ça :
-IA1
-IA2
-IA10...

Lors de l'affichage il me classe mes informations comme ça :
-IA1
-IA10
-IA2...

Pourquoi??Il les classe en binaire on dirait!!!Comment résoudre mon problème???

Informations :
-Serveur EasyPHP
-Mon champ est de type char(20)

Merci d'avance

Posté : 25 juil. 2005, 16:39
par zeus
le probleme c'est qu'il fait un tri sur un champs vaarchar. Le tri se déroule de cette manière : on compare les caractère 1 par 1 et en cas d'égalité, on trie donc :

1ere lettre : I, on cherche la suite
2eme lettre : A, on cherche la suite
3eme lettre : 1 et 2 => on met 2 à la fin et on cherche la suite
4eme lettre : vide et 0 on met vide en 1er et 0 en second

pour résoudre, je pense qu'il faut caster les 2 dernières lettres en chiffre

Posté : 25 juil. 2005, 16:44
par Erwin
Merci zeus mais comment tu castev les 1ere lettre en chiffre??

Re: Probleme d'order by dans un select

Posté : 25 juil. 2005, 16:53
par zeus

Code : Tout sélectionner

ORDER BY CAST(SUBSTR(Reference, 2, LENGTH(Reference)-2) AS UNSIGNED) ASC

Posté : 25 juil. 2005, 17:01
par Invité
Encore merci mais cela marche pas!!!Il me les classe un peu n'importe comment!!
IA10
IA7
IA0....

Re: Probleme d'order by dans un select

Posté : 25 juil. 2005, 17:02
par zeus
Essaye ça et dit moi ce qui est affiché

Code : Tout sélectionner

SELECT Reference, SUBSTR(Reference, 2, LENGTH(Reference)-2) FROM ...

Posté : 25 juil. 2005, 17:07
par Invité
Cela me donne que la 2eme lettre!!!Donc A

Re: Probleme d'order by dans un select

Posté : 25 juil. 2005, 17:09
par zeus
Et ça ? et dit moi ce qui est affiché

Code : Tout sélectionner

SELECT Reference, SUBSTR(Reference, 3, LENGTH(Reference)-2), LENGTH(Reference)-2 FROM ...

Posté : 25 juil. 2005, 17:17
par Invité
Dans la 2eme collone cela me donne la tauille de ce qui a aprés les lettre donc 1 pour les reference IA1,IA2 et 2 pour IA10

Re: Probleme d'order by dans un select

Posté : 25 juil. 2005, 17:23
par zeus
Donc tente

Code : Tout sélectionner

ORDER BY CAST(SUBSTR(Reference, 3, LENGTH(Reference)-2) AS UNSIGNED) ASC

Posté : 25 juil. 2005, 17:24
par Erwin
Désolé c'est pour ma 3eme colonne que cela me metb 1 ou 2 docn g la référence puis des nombre un peu au hasard et ensuite la taille de ce qui a aprés les lettres

Posté : 25 juil. 2005, 17:27
par Erwin
Merci bocoup zeus, c'est coool cela marche!!Mais quand il va y avoir des truc du genre IA100 cela va y classer pareil???Cela regarde en fait que ce qu'il y a aprés les 2 premieres lettres c'est ça???

Merci bocoup!!!!

Re: Probleme d'order by dans un select

Posté : 25 juil. 2005, 17:33
par zeus

Code : Tout sélectionner

LENGTH(reference)-2
permet de connaitre la taille de ce qui se trouve après les lettres

Code : Tout sélectionner

SUBSTR(Reference, 3, LENGTH(Reference)-2)
permet de récupérer les chiffres qui se trouve après les lettres (que que soit la taille du chiffres)

Code : Tout sélectionner

CAST(SUBSTR(Reference, 3, LENGTH(Reference)-2) AS UNSIGNED)
permet de caster ces chiffres qui sont en réalité une chaine de caractère (VARCHAR) en chiffres