8792 sujets

Développement web côté serveur, CMS

Re bonjour,

Mon problème est tous simple,

J'ai un champ dans une table nommé "fiche" qui contiens des nombres allant de 1 à 8500

Lorsque je classe la table dans une page web dans l'ordre croissant du champ "fiche" j'obtiens ceci :

999
998
997
etc ...
89
88
etc ...
8500
8499
etc ...

Hors comme chacun sais 89 est plus petit que 999 par exemple. Une solution ???

Avant pour palier à ce problème je faisais comme ça :
$reponse = mysql_query("SELECT * FROM referencement ORDER BY fiche*1 DESC");
Le *1 réglais le problème.

Mais maintenant ma requête à légèrement changer et le problème a refait son apparition :

$reponse = mysql_query("SELECT * FROM referencement WHERE categorie='$categories' ORDER BY '$order' DESC");

$order est égale à "fiche*1" ou "titre"


Avez-vous une idée ?
Modifié par Spark (14 Mar 2007 - 18:06)
Administrateur
Quel est le type de ton champ "nombre" ?

Si celui-ci est un CHAR, le classement est logique, car il est effectué sur les caractères.

Si celui-ci est un INT (ou équivalents SMALLINT/TINYINT, etc...), alors ORDER BY ... DESC se fera mathématiquement.

L'idéal est évidemment de stocker des nombres grâce au type approprié.
(Tu peux modifier la structure de ta table grâce à ALTER TABLE.)
Salut,

Il était en text j'ai mis int. Mais cela n'a pas suffit, l'ordre n'était plus en décroissant mais en croissant.

J'ai donc via l'administration MySQL réorganisé la table dans l'ordre décroissant. mais devinez quoi, si je ne met pas "DESC" (voir exemple 1 er post) les fiches apparaissent toujours dans l'ordre croissant.

Au final j'ai donc cumulé les 2, "DESC" dans ma requête et :

ALTER TABLE `referencement` ORDER BY `fiche` DESC

C'est plutôt curieux que j'ai du faire cette manip' sur la table.

Merci pour ton aide. Smiley smile

Si vous avez une explication à cette bizarrerie n'hésitez pas.
Modifié par Spark (14 Mar 2007 - 18:06)
Administrateur
Il est déjà bien d'avoir utilisé le bon type Smiley cligne

Par contre l'ordre d'apparition des enregistrements dans la table n'a aucune importance, c'est en théorie uniquement la requête SELECT qui doit utiliser la clause ORDER BY ... ASC/DESC pour trier les résultats. Si la colonne est indexée cela se fait très rapidement.

Par défaut ORDER BY trie par ordre croissant (ASC), et il faut préciser DESC pour trier par ordre décroissant. Le comportement que tu observes est donc normal Smiley smile

(quelle version de MySQL utilises-tu ?)
dew a écrit :
Par défaut ORDER BY trie par ordre croissant (ASC), et il faut préciser DESC pour trier par ordre décroissant. Le comportement que tu observes est donc normal Smiley smile


J'ai refais le film des variables et je me suis rendu compte qu'au final je n'avais pas les guillemets bien placé.

ORDER BY "$order"

qui donne :

ORDER BY "fiche DESC"

au lieu de

ORDER BY "fiche" DESC


Maintenant c'est bon.

dew a écrit :
(quelle version de MySQL utilises-tu ?)

4.0 chez mon hébergeur (v5 disponible mais bon, je ne préfère pas l'utilisé pour le moment, j'en pas l'utilité)
4.1.9 avec easy PHP


Merci Smiley murf