[MySQL] Probleme de tri numérique

Résolu
WizNx Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
 yoan -
Bonjour,

J'ai un petit probleme de tri des prix sur un site avec des articles...
C'est le probleme classique, l'objet à 7 € est classé après l'objet à 20 € en tri croissant...

J'ai donc fouillé un peu sur le net où j'ai trouvé ca : https://blogs.opera.com/news/

Et sur l'exemple ca marche...
ORDER BY CAST(le_champs as signed integer) asc;

Quand je l'utilise ca ne marche pas, je pense que ca doit provenir des espaces (les articles sont entre 20 000 et 3 000 000 d'euro)...
Du coup au tri, même avec CAST, je me retrouve avec

1 100 000
1 370 000
27 000
77 000
84 000
119 000
121 000
130 000
...

Resultat assez etrange... Je pense en fait qu'il me trie juste le premier groupe de chiffres avant l'espace...
Le probleme c'est que j'ai comme contrainte technique d'avoir le champs en varchar...

Alors ya t'il un moyen de trier ca directement via une requete MySQL ? le tri via php serai trop lourd à mettre en place, il faudrait que je reprenne tout le moteur de recherche...
Ou alors dois-je enlever tous les espaces dans la DB et les mettre en forme via php à l'affichage de la variable (solution de dernier recours si on peut pas trier ca en mysql)...

Merci d'avance
WizNx.
A voir également:

4 réponses

Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   420
 
Salut

Pour moi, la seule solution c'est la dernière que tu cite : Ou alors dois-je enlever tous les espaces dans la DB et les mettre en forme via php à l'affichage de la variable (solution de dernier recours si on peut pas trier ca en mysql)...

a++
0
WizNx
 
Bah en fait j'avais déjà vu sur le net certaines routines en MySQL qui traitent toute la chaine de caracteres pour un tri de ce type... Malheureusement c'est jamais quand on en a besoin qu'on tombe sur ce genre de truc... plus moyen de remettre la main dessus...

Et en fait je prefere opter pour cette solution que vraiment si ya pas d'autre solution en mysql...

Je m'explique, si je fais le tri par MySQL j'ai seulement une seule ligne à remplacer...

Si j'opte pour cette ultime solution, il va falloir que j'ecrive une routine qui convertit toutes les entrées dans la DB, et qui fasse la différence (car des fois à la place du prix il peut y avoir du texte, genre "nous consulter" ou "non communiqué" ou des conneries comme ca) et ensuite que je modifie la fonction d'enregistrement dans la db pour supprimer les espaces insérés dans le prix par le client, et ensuite il faudra que sur toutes les fonctions d'affichage du prix je formate l'affichage pour mettre des espaces de droite à gauche tous les 3 caracteres...
Rien de bien sorcier c'est clair... Mais ca me prendrait une demie journée (le site est assez énorme) alors que si je peux trier directement dans MySQL je n'aurai qu'une seule ligne à remplacer...

vouala.

@ plouche et merci
WizNx.
0
WizNx Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
C'est résolu...

ORDER BY CAST(REPLACE(le_champs,' ','') as signed integer) asc;

@ plouche
WizNx.
0
Ohm-WorK Messages postés 1464 Date d'inscription   Statut Contributeur Dernière intervention   420
 
Ok, bien vu :)
0
yoan
 
Nickel :)
0