Raoulmapoule Posté 18 Août 2005 Posté 18 Août 2005 (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é 18 Août 2005 par Raoulmapoule
Dan Posté 18 Août 2005 Posté 18 Août 2005 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
Raoulmapoule Posté 18 Août 2005 Auteur Posté 18 Août 2005 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 ?
Raoulmapoule Posté 18 Août 2005 Auteur Posté 18 Août 2005 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 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é.
Raoulmapoule Posté 18 Août 2005 Auteur Posté 18 Août 2005 (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 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 Modifié 18 Août 2005 par Raoulmapoule
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant