Page 1 sur 1

Trier en ordre naturel sur un champ alphanumérique

Posté : 01 oct. 2007, 05:21
par Patriboom
Bonjour!

Je suis tenu d'avoir un champ alphanumérique pour enregistrer des classements en course cycliste. Pourquoi? Parce que certains coureurs peuvent être disqualifiés ou éliminés par les juges ou qu'ils peuvent tout simplement abandonner et que leur rang - alors - n'est pas 999, mais "disq" ou "DNF" ou autre code connu.

Voilà donc mon problème. Le classement final est inscrit dans un champ alphanumérique et lors du tri, je me retrouve avec les rangs classés ainsi:


1
10
11
12
13
...
2
20
21
21


alors que je voudrais qu'ils soient en ordre naturel comme me le permettrait PHP (http://be.php.net/natsort)


1
2
3
4
5
...
10
11
12
...
20
21
22


comment faire?

voici ma requête actuelle:

$requRESU = "SELECT * FROM resultats 
     WHERE circuit_id = ".$Circuit." AND dte_course LIKE '2007-05-01' 
     ORDER BY Rang_final ASC, Dossard ASC";

C'est le champ Rang_final qui contient le classement et qui est en alphanumérique.

Merci à l'avance

Posté : 01 oct. 2007, 06:02
par Cyrano
Explore la doc SQL à propos de CAST() pour faire un transtypage qui te donnerait un classement numérique normal.

Posté : 01 oct. 2007, 15:00
par Patriboom
Merci, ça marche

Voici ma nouvelle requête:
SELECT * FROM resultats WHERE circuit_id = 3 AND dte_course LIKE '200705 1' ORDER BY CAST(Rang_final as UNSIGNED) ASC, Dossard ASC

Posté : 08 nov. 2007, 17:10
par Patriboom
Je reviens avec ma question, mais avec plus de complications.
Je veux maintenant avoir deux niveaux de CAST, pensez-vous que c'est possible?

Je pars de la requête du message précédent et je veux maintenant qu'un autre champ soi trié de la sorte. Voici les essais que j'ai faits et pour lesquels j'ai obtenu des messages d'erreur:
SELECT * FROM resultats WHERE circuit_id = 3 AND dte_course LIKE '200705 5' 
ORDER BY CAST(Categ as CHAR) DESC, BY CAST (Rang_final as CHAR) ASC

SELECT * FROM resultats WHERE circuit_id =3 AND dte_course LIKE '200705 5'
ORDER BY CAST( Categ AS CHAR, Rang_final AS CHAR ) ASC

Merci encore.

Posté : 08 nov. 2007, 17:50
par Cyrano
Logique, regarde bien ce que tu as mis en paramètre de CAST() dans ta requête : je ne t'en dis pas plus, ça, c'est une faute d'inattention ;)

Posté : 08 nov. 2007, 18:42
par Patriboom
J'allais écrire que je ne voyais rien jusqu'à ... vision: deux BY!!!!

Et en plus ... il y avait un espace entre CAST et (


Merci spécial à Cyrano qui ne ma pas donné la réponse toute cuite mais m'a laissé chercher un peu.

Posté : 08 nov. 2007, 19:24
par Hubert Roksor
j'ai obtenu des messages d'erreur
Les messages d'erreurs ont cette particularité d'indiquer précisément où se trouve l'erreur, c'est pourquoi on demande généralement de les poster.