Page 1 sur 1

question sur un order by

Posté : 20 avr. 2011, 14:46
par bst
bonjour,

Désolé de poser une question si idiote mais je n'ai pas trouver la solution :s
voila j'ai une requête sql avec un order by sur un champ varchar. J'ai mis varchar a cause de quelques enregistrements sinon la plupart du temps il s'agit de nombre entier.
donc quand j'effectue le order by la requête me renvoi logiquement cette ordre (1-10-11-2-20-21-3-30-31, etc...)
y'a t'il une solution autre que placer des 0 devant les nombre pour qu'une requête me renvoie l'ordre comme s'il s'agissait d'un INT (1-2-3 10-11-12-20-21 etc...)

Merci à vous

Re: question sur un order by

Posté : 20 avr. 2011, 15:34
par xTG
Si tu as un entier il faut mettre un type entier, auquel cas le ORDER BY fonctionnera comme tu le souhaites.
Car actuellement le terme "11" est avant le terme "2" dans l'ordre alphanumérique.
Une solution pourrait être de rajouter des zéro pour combler et ainsi conserver l'ordre mais c'est assez moche...
Exemple :
01
02
03
...
09
10
11
12
...

Re: question sur un order by

Posté : 20 avr. 2011, 16:07
par bst
oui mais comme je l'ai expliqué pas possible de mettre en int à cause de certains enregistrements, donc pas d'autre solution que le 0 ? :cry:

Re: question sur un order by

Posté : 20 avr. 2011, 16:19
par xTG
Non puisque le système ORDER BY fonctionne parfaitement, mais se base sur le type de données.
Donc un tri alphanumérique dans ton cas en raison du type varchar.

Re: question sur un order by

Posté : 20 avr. 2011, 17:25
par bst
ok merci bon dés demain je vais modifier toute ma baseret traiter les 0 qui vont apparaitre un peu partout ^^
j'aurai préférer éviter ^^
Merci encore

Re: question sur un order by

Posté : 21 avr. 2011, 00:30
par Cyrano
Tu devrais fouiller la documentation MySQL à propos de la fonction CAST. Tu pourrais en effet caster le champ dans ta clause ORDER BY auquel cas les valeur seraient traitées comme le type souhaité, des nombres en l'occurrence si tu ais un CAST() AS INT. Du coup, pas besoin de modifier quoique ce soit dans ta base.