Maison >base de données >tutoriel mysql >Comment rechercher des correspondances exactes dans des chaînes MySQL séparées par des virgules ?

Comment rechercher des correspondances exactes dans des chaînes MySQL séparées par des virgules ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-22 21:37:14628parcourir

How to Query for Exact Matches in Comma-Separated MySQL Strings?

Requête de correspondances exactes de chaînes séparées par des virgules dans MySQL

L'interrogation de valeurs spécifiques présente souvent des défis lorsque l'on travaille avec des champs MySQL contenant des chaînes séparées par des virgules. Par exemple, lorsque vous recherchez tous les enregistrements avec une valeur spécifique dans la chaîne, vous pouvez récupérer par inadvertance des enregistrements contenant d'autres valeurs pour le numéro cible.

Considérez la requête suivante :

<code class="language-sql">select * from shirts where colors like '%1%'</code>

Cette requête est conçue pour récupérer toutes les chemises de couleur rouge (color=1). Cependant, il récupère également les chemises de couleurs gris (=12) et orange (=15) car ces couleurs contiennent le chiffre 1.

Pour résoudre ce problème, vous pouvez améliorer la requête pour vous assurer qu'elle sélectionne uniquement la valeur de couleur exacte que vous recherchez. Voici deux méthodes couramment utilisées :

1. Connectez les virgules

Cette méthode consiste à ajouter des virgules à gauche et à droite de la valeur cible. Cela garantit que la chaîne de recherche correspond uniquement aux valeurs qui sont exactement égales à la valeur souhaitée.

<code class="language-sql">select * from shirts where CONCAT(',', colors, ',') like '%,1,%'</code>

2. Utilisez find_in_set

Les fonctions

find_in_set peuvent également être utilisées pour obtenir les résultats souhaités. Cette fonction prend deux paramètres :

  • La valeur cible que vous recherchez
  • La chaîne séparée par des virgules dans laquelle vous souhaitez effectuer la recherche

Lorsque find_in_set renvoie une valeur supérieure à 0, cela signifie que la valeur cible existe dans la chaîne. Voici un exemple de requête :

<code class="language-sql">select * from shirts where find_in_set('1', colors) > 0</code>

En utilisant l'une ou l'autre de ces deux méthodes, vous pouvez vous assurer que vos requêtes MySQL récupèrent avec précision les enregistrements pour les valeurs de couleur exactes qui vous intéressent, sans détecter de correspondances indésirables.

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