Énigme… order by

novembre 16, 2008

Cela part d’un problème tout simple,  trier les données d’une table:

Pour trier les enregistrements en fonction de la technologie, faisons un ORDER BY sur la colonne technologie:

Il semble que le serveur n’a pas compris ce que je lui demande, ou alors je ne maitrise pas du tout l’alphabet..
Rajoutons la clause ASC (au cas où)

Pas mieux !
eh ben mince alors !!!
MySQL ne veut décidement pas trier mes données comme je le souhaites. Et il devenu fou ? Dois-je changer de SGBDR ?

En fait un simple zoom sur la structure de la table nous permet de voir la chose d’un autre oeil, le bon !

La colonne technologie est de type ENUM

Les données stockées disposent d’un index numérique utilisé par MySQL pour les manipuler. C’est également cet index qui est utilisé pour le tri. En d’autres termes, PHP vaut 1, LINUX vaut 2 et MySQL vaut 3, par conséquent le tri fonctionne correctement.

Alors comment faire pour avoir le résultat escompté ?

Il faut forcer MySQL à utiliser la valeur chaine de caractères et non l’index:

  • la fonction cast()

Comments are closed.