Rechercher : dans
Par :

[MySQL] Probleme de tri numérique

Dernière réponse le 21 mar 2008 à 20:38:48 WizNx, le 31 aoû 2007 à 11:19:16 
 Signaler ce message aux modérateurs

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 : http://my.opera.com/cpr/blog/show.dml/160556

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.

Configuration: Windows XP
Firefox 1.0.7

Meilleures réponses pour « [MySQL] Probleme de tri numérique » dans :
Opérateurs de téléphonie mobile et les numéros utiles VoirCoordonnées des opérateurs de téléphonie mobile et les numéros utiles Liste non exhaustive SFR Orange Bouygues Telecom Virgin Mobile Tele2 NRJ Mobile M6 Mobile Neuf Mobile Debitel Breizh Mobile Coriolis Fnac Mobile
Cadre photo numérique : comment choisir ? VoirUn cadre photo numérique a l’avantage de pouvoir diffuser vos photos au format numérique sans ordinateur. Exit le cadre photo classique pour lequel il faut imprimer les photos ! Côté technologies, du plus simple au plus sophistiqué, nos astuces...
Réinitialiser le mot de passe root de MySQL VoirQue ce soit lors de la première installation ou après la perte du mot de passe principal de MySQL, il est nécessaire de pouvoir modifier le mot de passe administrateur (root) de MySQL. Vous avez perdu le mot de passe root de MySQL ? Pour pouvoir...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...
L'analogique et le numérique VoirQuelle est la différence entre analogique et numérique ? Les phénomènes qui nous entourent sont quasiment tous continus, c'est-à-dire que lorsque ces phénomènes sont quantifiables, ils passent d'une valeur à une autre sans discontinuité. Ainsi,...
SQL - Tri VoirTri des résultats Il est possible en SQL d'organiser les résultats grâce à la clause ORDER BY. La clause ORDER BY est suivie des mots clés ASC ou DESC, qui précisent respectivement si le tri se fait de manière croissante (par défaut) ou...

1

Ohm-WorK, le 31 aoû 2007 à 11:52:27

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++ La vie est une maladie mortelle, sexuellement transmissible ­(Woody Allen)

Répondre à Ohm-WorK

2

WizNx, le 31 aoû 2007 à 11:59:24

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.

Configuration: Windows XP
Firefox 1.0.7

Répondre à WizNx

3

WizNx, le 31 aoû 2007 à 12:30:12

C'est résolu...

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

@ plouche
WizNx.

Configuration: Windows XP
Firefox 1.0.7

Répondre à WizNx

4

Ohm-WorK, le 31 aoû 2007 à 12:55:19

Ok, bien vu :) La vie est une maladie mortelle, sexuellement transmissible ­(Woody Allen)

Répondre à Ohm-WorK

5

 yoan, le 21 mar 2008 à 20:38:48

Nickel :)

Répondre à yoan
Collection CommentÇaMarche.net