sql ORDER BY ... DESC

WRInaute impliqué
Bonjour,

je viens de faire une constatation étonnante sur la requète suivante

Code:
SELECT * FROM matable  ORDER BY Prix DESC

me renvoit des prix classés de cette manière

Code:
900
800
700
1500
1400
1200

j'aurai attendu plutot quelque chose du genre

Code:
700
800
900
1200
1400
1500

Quelqu'un connait-il la raison de cette aberration et le moyen d'y remédier ?

D'avance Merci :!:
 
WRInaute occasionnel
Quel est le type de ton champ "prix" ?

Il faudait qu'il soit de type Int (ou plus optimisé en fonction du max)
 
WRInaute accro
tu es en varchar. donc ->
SELECT * FROM matable ORDER BY Prix *1 DESC

le *1 force la transformation en nombre
 
WRInaute accro
e-kiwi a dit:
tu es en varchar. donc ->
SELECT * FROM matable ORDER BY Prix *1 DESC

le *1 force la transformation en nombre

On se croirait en Ocaml à faire des opérations "inutiles" pour changer le type.
 
WRInaute impliqué
pas si inutile que ça ...

j'ai changé le type ( de int à varchar ) car sur l'hébergeur chez qui je suis la base est bizarement configurée

j'ai beau mettre null et valeur par défaut vide ... si on ne rentre pas de chiffre ça met 0 !!!!

alors j'ai mis en varchar et donc voila d'où venait mon problème et donc la conversion est utile :wink:
 
H
Haq
Guest
De toute façon, je suppose que tu ne vends rien à 0 euro... donc tu peux mettre ton champ en "int" et gérer le cas particulier du prix non connu (0) avec php.
 
WRInaute impliqué
aK a dit:
De toute façon, je suppose que tu ne vends rien à 0 euro... donc tu peux mettre ton champ en "int" et gérer le cas particulier du prix non connu (0) avec php.

non mais mon client voulait pouvoir mettre des articles sans prix ...

cependant, effectivement, c'est aussi une solution de traiter ça par php :lol:

A+
 
WRInaute impliqué
j'ai beau mettre null et valeur par défaut vide ... si on ne rentre pas de chiffre ça met 0 !!!!
T'aurais pas fait ça en deux étapes et regardé le résultat après ? Ou bien passé de varchar à int après avoir déjà fait des insertions ?
j'ai jamais entendu parler d'une config comme ça.

Essaye quand même de faire un
UPDATE table SET prix=NULL WHERE prix=0
et regarde comment se comportent tes insertions après.

La bidouille c'est cool mais bon, c'est quand même mieux de faire un truc propre et où l'on trouve pourquoi ça ne fonctionnait pas.
 
WRInaute impliqué
yanhl a dit:
j'ai jamais entendu parler d'une config comme ça.

ben moi non plus j'avais jamais vu ça !

mais j'ai fait des test avec de nouvelles insertions !

( donc pas besoin de faire de update ... )

et ben ça marche pas !!!

ça me met des 0 partout où j'ai laissé la case vide :evil:
 
WRInaute impliqué
et c'est quoi le code de ton insertion ?
INSERT INTO matable (prix) VALUES (''), non ? Vu que tu étais partit en varchar, ce serait bien possible.
Faut savoir que le zéro existe et que '' donne zéro. Pour avoir NULL, il faut faire :
INSERT INTO matable (prix) values (NULL)
donc faire une distinction au moment de l'insertion.

Je pense que là on doit y être : j'ai fait un test pour vérifier mes dires et être bien sûr de ne pas écrire de connerie.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut