MarvinLeRouge Posté 26 Novembre 2008 Posté 26 Novembre 2008 Bonjour, Voilà, j'ai une requète du type : SELECT id_categorie, nomFROM categoriesWHERE id_categorie IN (valeurA, valeur B, valeurC) Je ne vois pas comment faire pour être sûr que les résultats me soient restitués dans l'ordre des valeurs fournies. Je m'explique : si valeurA vaut 23, valeurB 2 et valeur3 158, je veux que mon résultat récupéré soit 23 - nomdu23 2 - nomdu2 158 - nomdu158 Est-ce le cas par défaut avec un IN, ou sinon quelqu'un connaîtrait-il le truc pour obtenir ça ? Merci
Kioob Posté 26 Novembre 2008 Posté 26 Novembre 2008 Hello, non "IN( )" ne fait aucun tri. Et le seul moyen d'être certain d'avoir les données dans un certain ordre est d'utiliser ORDER BY (voir GROUP BY, mais sous certaines conditions).
MarvinLeRouge Posté 26 Novembre 2008 Auteur Posté 26 Novembre 2008 ORDER BY étant ici inutilisable puisqu'il s'agit d'un ordonnancement suivant la fourniture des paramètres, et non d'un ordonnancement suivant leur valeur ... Et zut ! Obligé de faire un tri bidon pour 3 fois rien. Merci Kioob
Kioob Posté 26 Novembre 2008 Posté 26 Novembre 2008 à noter que tu peux faire des ORDER complexes quand même : order by if( id_categorie = valeurA, 1, if( id_categorie = valeurB, 2, 3 ) ) Je n'ai pas regardé dans la doc, mais il y a peut être aussi un switch/case. Il me semble qu'on a déjà parlé ici même des autres possibilités, telles que l'utilisation de champs ENUM.
MarvinLeRouge Posté 26 Novembre 2008 Auteur Posté 26 Novembre 2008 Trouvé ! la fonction field Si on fait un order by field(champ, valeur1, valeur2, valeur3), on récupère bien les lignes dans l'ordre d'apparition des valeurs en question (puisque field renvoie un index dans ladite liste ).
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant