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

axis1
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 30 Jan 2005

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

Message le Sam Déc 27, 2008 16:50

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
Dernière édition par axis1 le Sam Déc 27, 2008 21:38, édité 1 fois.


Marie-Aude
Modérateur
Modérateur
 
Messages: 11889
Inscription: 5 Juin 2006

Message le Sam Déc 27, 2008 18:24

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à

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: Mysql faire un order by sur une partie d'un champ

Message le Sam Déc 27, 2008 19:24

axis1 a écrit: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 écrit: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 écrit: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.

axis1
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 7
Inscription: 30 Jan 2005

Melanger et bien agiter et hop voic la réponse

Message le Sam Déc 27, 2008 21:43

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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité