Problème de tri avec des nombres

Problème de tri avec des nombres - SQL/NoSQL - Programmation

Marsh Posté le 15-02-2010 à 15:51:54    

Bonjour,
j'ai une liste de nombres dans ma base de données et quand je les tri dans l'ordre croissant j'obtiens :
 
1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 3 ...
 
et j'aimerais tout naturellement :
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
 
C'est la première fois que je vois ça. Comment remédiez à ce problème ?
 
Merci
Maxime

Reply

Marsh Posté le 15-02-2010 à 15:51:54   

Reply

Marsh Posté le 15-02-2010 à 15:56:34    

Tes nombres se trouvent très probablement dans un champ de type texte (char, varchar...). Faut modifier le type du champ en integer.
Après, ça peut venir aussi d'un option spéciale qui aurait été précisée dans la clause ORDER BY ou d'un transtypage du champ d'integer en varchar. mais le plus probable reste ce que j'ai dit au début.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 15-02-2010 à 16:01:59    

Bien vu c'est bien cela. Mais ça ne m'arrange pas trop de mettre le champ en integer. En fait ces numéros correspondent aux numéros d'albums de bandes dessinées que je possède. Et parfois il y a des hors-séries que je note HS1, HS2,...
C'est pour ça que j'avais mis le champ en varchar. Est-ce que je suis obligé de créer une nouvelle colonne pour signaler les hors-série ?
 
Merci !

Reply

Marsh Posté le 15-02-2010 à 16:08:29    

Utilise l'option INET_ATON si tu stockes tes nombres dans un varchar

Reply

Marsh Posté le 15-02-2010 à 16:22:24    

la fonction INET_ATON() c'est pour convertir une adresse internet en valeur numérique, pas sûr que ca marche....
 
pour ton tri, sous mysql y'a une astuce : http://www.757.org/~joat/wiki/inde [...] g_in_MySQL

Reply

Marsh Posté le 15-02-2010 à 16:33:27    

Nickel c'est ce que je voulais. Mais le problème maintenant c'est que lors d'un tri ascendant les hors-séries (HS1, HS2,...) se retrouvent en haut de la liste, alors qu'avant ils étaient en bas vu qu'il n'y avait pas de zéro devant.
Je ne pense qu'il y ait de solutions en revanche pour ce soucis. Je vais me débrouiller avec des if et des else sinon.
 
Merci beaucoup pour l'astuce couak.

Reply

Marsh Posté le 15-02-2010 à 17:02:44    

couak a écrit :

la fonction INET_ATON() c'est pour convertir une adresse internet en valeur numérique, pas sûr que ca marche....
 


Convertir une IP en binaire ou un chiffre en binaire n'a pas d'importance.
J'utilise cette fonction pour trier mes chiffres et ca fonctionne ;)
 
La méthode de ton lien fonctionne également.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed