[MySQL] Probleme de tri numérique
Résolu
WizNx
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
yoan -
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.
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:
- [MySQL] Probleme de tri numérique
- Télévision numérique - Guide
- Télévision numérique terrestre - Accueil - TV & Vidéo
- Comment faire un tri personnalisé sur excel - Guide
- Pavé numérique bloqué - Guide
- Logiciel tri photo - Guide
4 réponses
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++
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++
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.
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.