ordre naturel dans requete

jeanemar
Invité n'ayant pas de compte PHPfrance

18 déc. 2010, 19:57

Bonjour,
j'essaye d'ordonner le résultat de ma requete en ordre naturel, la colonne qui me sert d'ordre (colonne ref) est du type text. J'ai regardé du coté de la fonction CAST mais sans y arriver
voici ma requete:

Code : Tout sélectionner

$sql = 'SELECT * FROM ma_table WHERE Publie != "N" GROUP BY Var ORDER BY ref ASC';
par exemple ça me donne comme ordre ref 1, ref 10, ref 2, ...
ce que je souhaite c'est avoir ref 1, ref 2, ref 10...
merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 déc. 2010, 21:51

Un champ de type texte ne peut être trié que par ordre alphabétique, c'est à dire que les chaines sont comparées caractère par caractères pour être ordonné. De ce fait, 1, 11 et 153 seront affichées avant 2, 20 et 210.

Pour que ton tri soit cohérent, il te faut soit préfixer tes nombres avec suffisamment de zéro pour que les chaines puissent s'ordonner : "0001", "0002", "0011", "0020" ...

Ou autrement, tu peux utiliser une colonne de type numérique (donc pas de type varchar) qui contiendra juste le numéro de la référence (ou juste une clé de tri) sur laquelle tu pourras faire ton tri comme tu le souhaites :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

devlop78
Invité n'ayant pas de compte PHPfrance

19 déc. 2010, 02:35

Un champ de type texte ne peut être trié que par ordre alphabétique, c'est à dire que les chaines sont comparées caractère par caractères pour être ordonné. De ce fait, 1, 11 et 153 seront affichées avant 2, 20 et 210.

Pour que ton tri soit cohérent, il te faut soit préfixer tes nombres avec suffisamment de zéro pour que les chaines puissent s'ordonner : "0001", "0002", "0011", "0020" ...

Ou autrement, tu peux utiliser une colonne de type numérique (donc pas de type varchar) qui contiendra juste le numéro de la référence (ou juste une clé de tri) sur laquelle tu pourras faire ton tri comme tu le souhaites :)

J'ai failli le dire, de là à en être certain ...

De toute façon, à partir où tes champs ont le schéma "ref xxxx", alors on peut croire que le mot "ref " est inutile car tout le temps répété, voire faisant partie de la vue (MVC).

jeanemar
Invité n'ayant pas de compte PHPfrance

19 déc. 2010, 17:29

merci pour l'aide, le plus simple est de de transformer ma colonne en type num et travailler avec des chiffres.

ViPHP
ViPHP | 1996 Messages

19 déc. 2010, 19:47

Ou le trier après...
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr