6 votes

"où dans " clause mysql

J'ai utilisé une requête mysql où il y a "where id in ("22,20,21")". mais quand j'obtiens le résultat, c'est comme un tableau ordonné dans un ordre croissant, c'est-à-dire 20,21,20.

mais j'en ai besoin dans le même ordre que celui de la clause.

18voto

nathan gonzalez Points 5866

I pensez à vous devriez pouvoir utiliser le mot-clé FIELD comme suit :

SELECT * FROM table
WHERE id in (22,20,21)
ORDER BY FIELD(id,22,20,21);

ceci est spécifique à mysql, et semble magique, mais cela fonctionne.

2voto

Adam Vandenberg Points 8098

Les résultats SQL ne sont pas ordonnés, à moins qu'on ne leur donne un ordre explicite ; l'ordre ne sera pas récupéré dans le fichier in clause.

Comme les ID ne sont ni ASC ni DESC, il faudrait ORDER BY autre chose ; comment déterminez-vous l'ordre 22,20,21 en premier lieu ?

2voto

Crozin Points 22346

Comme mentionné... WHERE n'a aucune incidence sur l'ordre des résultats. Utilisez MySQL intégré FIELD fonction en ORDER BY pour spécifier comment l'ensemble des résultats doit être ordonné :

... WHERE id IN (22, 20, 21) ORDER BY FIELD(id, 22, 20, 21) ...

0voto

Asaph Points 56989

Vous ne pouvez pas spécifier l'ordre dans lequel les résultats seront retournés dans un fichier de type WHERE clause. Si vous voulez spécifier l'ordre, vous devez ajouter une clause ORDER BY à votre requête. Pour une solution qui utilise FIND_IN_SET voir cette réponse .

0voto

Michael Kopinsky Points 584

En général, le système de base de données renvoie les résultats dans l'ordre qui lui convient. Si vous voulez qu'ils soient ordonnés, vous devez le lui dire. Cet article de blog fournit une méthode pour y parvenir ; vous pouvez peut-être trouver d'autres solutions en ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X