Requêtes MySQL : cibler précisément les valeurs dans des chaînes séparées par des virgules
De nombreuses bases de données utilisent des champs contenant des valeurs séparées par des virgules (CSV). Cela présente souvent des défis lors de la recherche de valeurs spécifiques dans ces chaînes. Considérons une colonne COLORS
dans un tableau SHIRTS
. Une simple requête LIKE
, telle que SELECT * FROM SHIRTS WHERE COLORS LIKE '%1%'
, peut produire des résultats inexacts, renvoyant des entrées où « 1 » fait partie d'une valeur plus grande (par exemple, « 12 » ou « 15 »).
Pour récupérer avec précision uniquement les chemises de couleur « 1 », évitez les correspondances partielles. Voici deux stratégies efficaces :
Méthode 1 : Ajouter des virgules pour une correspondance précise
Cette approche consiste à encadrer la chaîne CSV de virgules avant la comparaison. Cela garantit que seules les valeurs complètes correspondent :
<code class="language-sql">SELECT * FROM SHIRTS WHERE CONCAT(',', COLORS, ',') LIKE '%,1,%'</code>
En ajoutant des virgules de début et de fin, seules les entrées où « ,1 » existe dans la chaîne seront sélectionnées.
Méthode 2 : Utiliser FIND_IN_SET
La fonction FIND_IN_SET
offre une solution plus directe. Il identifie la position d'une sous-chaîne dans une chaîne séparée par des virgules, renvoyant une valeur non nulle si elle est trouvée :
<code class="language-sql">SELECT * FROM SHIRTS WHERE FIND_IN_SET('1', COLORS) > 0</code>
Cette méthode est particulièrement utile lorsqu'il s'agit d'identifiants numériques ou de codes de couleur. Il vérifie directement la présence de « 1 » comme valeur distincte dans la chaîne COLORS
.
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!