Maison >base de données >tutoriel mysql >Comment pouvez-vous contrôler l'ordre des résultats dans une fonction MySQL IN() ?

Comment pouvez-vous contrôler l'ordre des résultats dans une fonction MySQL IN() ?

DDD
DDDoriginal
2024-11-13 01:52:02200parcourir

How Can You Control the Order of Results in a MySQL IN() Function?

Ordre MySQL dans une fonction IN()

Lors de l'exécution d'une requête avec une clause IN(), il peut être souhaitable de trier les éléments retournés en fonction de l'ordre dans lequel ils ont été fournis dans la fonction. Par défaut, MySQL ne garantit pas cet ordre.

Considérons l'exemple suivant :

SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');

La sortie attendue peut être triée dans l'ordre dans lequel les valeurs ont été saisies dans la fonction IN() :

id name
5 B
6 B
1 D
15 E
17 E
9 C
18 C

Au lieu de cela, MySQL peut appliquer son propre algorithme de tri, ce qui pourrait entraîner un ordre différent.

Solution :

Pour garantir le ordre souhaité, MySQL fournit la fonction FIELD(). Cette fonction prend une chaîne et une série de chaînes et renvoie la position de la première chaîne dans les arguments suivants.

En utilisant FIELD(), vous pouvez trier le résultat comme suit :

SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')

Cette requête garantit que les lignes sont renvoyées dans l'ordre spécifié dans la fonction IN().

Optimisation des performances :

Alors que la fonction FIELD() remplit les fonctionnalité souhaitée, il est important de prendre en compte les implications en termes de performances. Pour les ensembles de données volumineux, l'utilisation d'une colonne indexée spécialement conçue pour le tri peut améliorer considérablement les performances.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn