Mysql faire un order by sur une partie d'un champ [RESOLU]

Nouveau WRInaute
bonjour,

je cherche à trier des résultats d'une requête mysql sur une partie d'un champ.
ce champ contient de 1 à 4 chiffres, puis un - et 1 ou deux lettres.

je voudrais faire le tri sur un ordre croissant des chiffres à gauche du tiret.

j'ai essayé Order By 'Nom du CHAMP' RegexP '^[0-9]{1,4}' asc

mais cela ne donne rien.

je peux éventuellement faire un tableau avec les différentes valeurs de ces chiffres et demander l'order by sur les valeurs de ce tableau mais je ne connais pas la syntaxe et reste confronté à l'élimination de la partie à droite du tiret

merci de votre aide

patrice
 
WRInaute accro
Tu rajoutes dans ta requete un champ calculé qui contient la partie sur laquelle tu veux trier, et tu fais l'order by sur celui là
 
WRInaute accro
Re: Mysql faire un order by sur une partie d'un champ

axis1 a dit:
je cherche à trier des résultats d'une requête mysql sur une partie d'un champ.
ce champ contient de 1 à 4 chiffres, puis un - et 1 ou deux lettres.
Donc ton champ est de type texte (varchar ou autre du même genre).

axis1 a dit:
je voudrais faire le tri sur un ordre croissant des chiffres à gauche du tiret.
Je suppose que tu veux un tri numérique, i.e. 9 est plus petit que 10, alors qu'à l'heure actuelle il te fait un tri alphanumérique (9 est plus grand que 10)?

axis1 a dit:
j'ai essayé Order By 'Nom du CHAMP' RegexP '^[0-9]{1,4}' asc

mais cela ne donne rien.
regexp renvoie juste 0 ou 1 suivant que ton champ correspond ou pas à l'expression, donc a priori toujours 1 dans ton cas. Je ne sais pas s'il existe un moyen (simple) d'extraire un bout d'une chaîne en utilisant une regex avec mysql (c'est possible avec postgresql).

Essaie plutôt order by cast(champ as signed) par exemple. Ca fait double effet: ça élimine tout ce qui dépasse, et en plus ça rendra le tri numérique.

Jacques.
 
Nouveau WRInaute
Melanger et bien agiter et hop voic la réponse

merci à vous deux

j'ai fait un mix

pour la fonction c'est SUBSTRING_INDEX(VolUnit, '-', 1) as Tri qui me permet de couper mon champ VolUnit à la première occurrence de - et de revoyer tout ce qui est gauche du tiret, et de le renommer en Tri

valeur utilisée dans order by cast(Tri as signed) pour transformer en numérique ce qui ne l'est pas.

et voila comment se compliquer encore une fois l'existence pour rendre service à l'ingrat visiteur qui ne se rendra compte de rien lol

merci encore

patrice
 
Discussions similaires
Haut