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!