La communauté ALL HTML c'est 58827 membres à ce jour dont 3 inscrits aujourd'hui et 32 depuis une semaine.

  • imprimer
  • aide

Forum de discussions « PHP - SQL »

Retrouvez les publications relatives à ces discussions dans nos rubriques PHP, SQL.

Souci fonction CAST()

liste des forums liste des discussions Participer à la discussion

Photo de cyrilj 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
Photo de nours312 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;)
Photo de cyrilj 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
Photo de nours312 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 !
Photo de cyrilj 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

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions