Aller au contenu

Sujets conseillés

Posté (modifié)

Bonjour à tous,

J'ai un petit problème sur une requete mysql.

Suite a de multiples problèmes avec des champs FLOAT j'ai décidé de modifier ma base et de basculer ces derniers en CHAR bien qu'ils contiennent des chiffres flotants.

Le problème c'est que maintenant dans mes requetes, l'option ORDER BY mon_float_qui_est_char me retourne n'importe quoi...

J'ai essayé des faire des CAST, des CONVERT et tout plein d'autre trucs mais rien n'y fait...

une idée ?

Voici ma requete qui fonctionnait lorsque mon_champ était de type FLOAT et qui ne fonctionne plus maintenant qu'il est de type CHAR :

SELECT DISTINCT mon_champ FROM ma_table  WHERE mon_champ IS NOT NULL ORDER BY mon_champ

Modifié par Raoulmapoule
Posté

En changeant de type du champ tu demandes aussi à mySql de classer les résultats alphabétiquement au lieu de les classer numériquement.

Ce n'était donc pas une bonne idée :(

Dan

Posté

Merci pour ta réponse Dan mais il me semblait que l'on pouvait forcer le type de la donnée dans la requete, ce n'est pas ça le transtypage ?

Posté

Sinon dans le cas mon problème serait insoluble et qu'il me faille revenir en arrière, je suis preneur de conseils sur l'utilisation des FLOAT...

Mon problème type c'est un SELECT mon_float FROM ma_table WHERE mon_float='$valeur_flotante' qui ne retourne rien alors que la colone est trufée de réponses... le résultat est le même avec l'option recherche de phpmyadmin :nono:

J'ai vu dans les doc mysql qu'il avait pas mal de difficultés a utiliser les FLOAT pour des questions liée aux nombre de chiffres après la virgule, mais ça m'a paru très compliqué.

Posté (modifié)

Je pense avoir trouvé une solution... oufff

Bon c'est pas très catholique (tant pis pour les JMJ) mais bizarrement ca a l'air de bien fonctionner :huh:

Le principe est de multiplier mon_champ 10 dans le ORDER BY de façon a ce que les résultats du select de leur côté ne soient pas altérés et restent flotants.

Bien sur je prends 10 car dans mon cas je n'utilise qu'un seul chiffre après la virgule, si j'en utilisait deux je multiplierais par 100 et ainsi de suite.

Ca donne donc :

SELECT DISTINCT mon_champ FROM ma_table  WHERE mon_champ IS NOT NULL ORDER BY mon_champ * 10

Bon, même si ça marche, il y a des choses qui m'echappent, comment se fait-il que la multiplication du CHAR par 10 se fait correctement (comme si le CHAR était un FLOAT) et que sinon ça ne fonctionne pas ?

Plus incroyable encore, j'ai un autre champ qui était un FLOAT et que j'ai basculé en CHAR et qui pour la même requete (sans la multiplication par 10) fonctionne bien :wacko:

Modifié par Raoulmapoule

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...