question sur un order by

bst
Petit nouveau ! | 6 Messages

20 avr. 2011, 14:46

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

ViPHP
xTG
ViPHP | 7331 Messages

20 avr. 2011, 15:34

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

bst
Petit nouveau ! | 6 Messages

20 avr. 2011, 16:07

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:

ViPHP
xTG
ViPHP | 7331 Messages

20 avr. 2011, 16:19

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.

bst
Petit nouveau ! | 6 Messages

20 avr. 2011, 17:25

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

Mammouth du PHP | 19672 Messages

21 avr. 2011, 00:30

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: