tri alphanumerique

asmae
Invité n'ayant pas de compte PHPfrance

15 nov. 2007, 18:48

bonjour,

Je veux afficher une liste d'informations en ordre décroissant je fais le select avec "desc", le prolème c'est que le critère sur lequel je veux trier peut contenir des lettres et des chiffres et donc le tri ne se fait pas correctement :

en fait voilà le résultat que j'obtient
10181
10180
1017b
1017a
10179
10178

et voilà le resultat souhaité


10180
10179
10178
1017b
1017a

et voial la requete que je fais
select * FROM `rds_edition`$addtable WHERE $whereSQL AND isNewEdition='1' ORDER BY ref_idRDS DESC LIMIT requeststart,$requestsize
quelqu'un a une solution ???
Merci

Mammouth du PHP | 2937 Messages

15 nov. 2007, 19:47

Tu peux utiliser la fonction sort() pour retrier les résultats de la requête.
$requete = mysql_query ("select ref_idRDS FROM `rds_edition`$addtable WHERE $whereSQL AND isNewEdition='1' ORDER BY ref_idRDS DESC LIMIT requeststart,$requestsize");
// Évite le SELECT * lorsque tu n'as besoin que d'une colonne
$resultat = mysql_fetch_assoc ($requete);
$retri = $resultat['ref_idRDS'];
sort ($retri, SORT_STRING);

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 nov. 2007, 20:27

Tu peux également tenter de caster le contenu du champ directement dans la requête, mais MySQL va ignorer la partie non numérique et j'ai peur que le résultat soit aléatoire pour les occurrences qui contiennent des lettres.

Mais ça vaut le coup d'essayer, surtout que ça sera plus optimisé qu'un tri PHP ;)

Code : Tout sélectionner

SELECT liste, des, champ FROM matable ORDER BY CAST(colonne AS INTEGER)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1380 Messages

15 nov. 2007, 21:55

Ça ressemble à un tri naturel. Si le cast ne donne rien, essaye ceci pour voir:

Code : Tout sélectionner

SELECT liste, des, champ FROM matable ORDER BY champAtrier + 0 DESC
Une autre manière de CASTer
ripat

asmae
Invité n'ayant pas de compte PHPfrance

16 nov. 2007, 17:03

Merci pour votre interet

en fait j'ai essayé toutes ces solutions mais sans resultat, mnt la seule solution c'est de pouvoir faire la diffrence entre les numero et les chiffre dans le order by et de faire le desc sur les chiffre seuelement sachant que le type du champs dans la base de données c'est varchar

mais encore je sais pas coment faire ????