Faire correspondre des valeurs spécifiques dans une chaîne MySQL séparée par des virgules
Lorsque vous travaillez avec des tableaux contenant des valeurs séparées par des virgules, il est souvent nécessaire d'isoler des valeurs spécifiques au sein de ces chaînes. Toutefois, l'utilisation de l'opérateur LIKE avec le caractère générique (%) peut entraîner des correspondances inattendues.
Considérez le champ COULEURS dans la table CHEMISES, qui contient des valeurs telles que « 1,2,5,12,15 ». Une requête du type "SELECT * FROM shirts WHERE colours LIKE '%1%'" tente de trouver toutes les chemises de couleur rouge (color=1). Cependant, il récupère également de manière inattendue des chemises de couleurs gris (couleur = 12) et orange (couleur = 15).
Solution :
1. Virgules de connexion :
La solution classique consiste à concaténer des virgules sur les côtés gauche et droit de la chaîne :
<code class="language-sql">SELECT * FROM shirts WHERE CONCAT(',', colors, ',') LIKE '%,1,%'</code>
Cela ajoutera une virgule avant et après la chaîne, garantissant que seules les correspondances exactes (couleur = 1) sont sélectionnées.
2. Utilisez la fonction find_in_set :
Vous pouvez également utiliser la fonction find_in_set pour rechercher une valeur spécifique dans une chaîne séparée par des virgules :
<code class="language-sql">SELECT * FROM shirts WHERE find_in_set('1', colors) > 0</code>
Cette fonction renverra une valeur non nulle si la valeur spécifiée est trouvée dans la chaîne, isolant ainsi les chemises avec couleur=1.
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!