Probleme d'order by dans un select

Erwin
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 16:36

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juil. 2005, 16:39

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Erwin
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 16:44

Merci zeus mais comment tu castev les 1ere lettre en chiffre??

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juil. 2005, 16:53

Code : Tout sélectionner

ORDER BY CAST(SUBSTR(Reference, 2, LENGTH(Reference)-2) AS UNSIGNED) ASC
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 17:01

Encore merci mais cela marche pas!!!Il me les classe un peu n'importe comment!!
IA10
IA7
IA0....

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juil. 2005, 17:02

Essaye ça et dit moi ce qui est affiché

Code : Tout sélectionner

SELECT Reference, SUBSTR(Reference, 2, LENGTH(Reference)-2) FROM ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 17:07

Cela me donne que la 2eme lettre!!!Donc A

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juil. 2005, 17:09

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 ...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 17:17

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juil. 2005, 17:23

Donc tente

Code : Tout sélectionner

ORDER BY CAST(SUBSTR(Reference, 3, LENGTH(Reference)-2) AS UNSIGNED) ASC
Modifié en dernier par zeus le 25 juil. 2005, 17:26, modifié 1 fois.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Erwin
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 17:24

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

Erwin
Invité n'ayant pas de compte PHPfrance

25 juil. 2005, 17:27

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!!!!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

25 juil. 2005, 17:33

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer