-
Message publié le lundi 18 août 2008 à 15 h 39 par cyrilj.
-
Bonjour,
j'ai un souci pour trier "numériquement" un alias généré par un champ VARCHAR :
1- Ma requête actuelle : select *, SUBSTRING(reference,10,3) as finref from fiches ORDER BY finref
qui me donne
01 02 03 04 05 06 07 08 09 10 100 11 12 ...
Mais ce que je souhaite est :
01 02 03 04 05 06 07 08 09 10 11 12 ... 100
J'ai donc modifié ma requête après avoir fouillé sur des forums :
2- Ma nouvelle requête : select *, SUBSTRING(reference,10,3) as finref from fiches ORDER BY CAST(finref as INT(255))
et la j'ai une erreur.
J'ai tourné le problème dans tous les sens. J'ai à chauqe fois une erreur. Ma version de PHP est 4.4.8
Avez-vous une idée ? Merci pour votre aide.
Cyril
-
Message publié le lundi 18 août 2008 à 18 h 39 par nours312. hé oui
-
salut :
je n'ai jamais été confronté à ce souhait, donc, je te donne une piste qui fonctionnera mais il y a surement plus simple et plus léger ...
1. tu prend ton champs normalement,
2. tu ajoute des zéros devant tes chaines de résultats, de façon qu'elles contiennent le mm nb de chiffre ( 1 => 001, ...)
3. tu les ranges par ordre croisant !
il faut que tu conserve tes valeurs dans un array pour le tri ...
je te laisse le soin de mettre en place les deux fonctions nécessaires ...
BonCode;)
-
Message publié le mardi 19 août 2008 à 18 h 36 par cyrilj.
-
Bonsoir
merci pour la réponse.
Je vais creuser car je ne vois pas comment faire pour ajouter des '0' dans ma requète directement.
Je vais méditer.
Par contre, si quelqu'un a une info avec CAST(), ce serait bien. Merci.
Cyril
-
Message publié le mardi 19 août 2008 à 19 h 41 par nours312. hé oui
-
et ceci ?
ORDER BY CAST(REPLACE(le_champs,' ','') as signed integer) asc;
http://www.commentcamarche.net/forum/affich-3496052-mysql-probleme-de-tri-numerique
cela te conviend ?
par contre, G pas plus d'info, je ne connait pas cette fonction, et je ne l'ai pas trouvée sur la doc Mysql ... si tu fait des recherches à ce sujet, il serait profitable à tous de nous fournir les lien ;)
et ce dont je parlait tout à l'heure, été str_pad($variable, "3", "0", STR_PAD_LEFT) // cela ajoute des "0" à "gauche" jusqu'à ce que ta chaine soit de longueur "3" ....
Voili, voilou !
-
Message publié le mercredi 20 août 2008 à 09 h 36 par cyrilj.
-
Bonjour
j'aivais bien vu sur commentcamarche mais comme tu me l'a indiqué, j'avais un souci avec le nombre de Zéro à ajouter devant chaque alias 'finref' de ma requète.
J'ai résolu le souci en faisant :
"select *, LPAD(SUBSTRING(reference,10,3), '3', '0') as finref from fiches where (reference like '".$refD."%' or reference like '".$refW."%' or reference like '".$refB."%') ORDER BY finref desc"
Voilà. Merci pour tout.
Cyril