Maison >base de données >tutoriel mysql >Comment puis-je interroger efficacement MySQL pour obtenir des correspondances exactes dans les champs de valeurs séparées par des virgules ?
Optimisation des requêtes MySQL pour les valeurs séparées par des virgules
Examinons une table SHIRTS
avec un champ COLORS
stockant des codes de couleur numériques séparés par des virgules. Une simple LIKE
requête peut donner des résultats inexacts :
<code class="language-sql">SELECT * FROM shirts WHERE colors LIKE '%1%'</code>
Cette requête renvoie les chemises contenant « 1 » n'importe où dans le champ colors
, y compris les chemises avec des couleurs comme 1, 12 ou 15. Pour trouver uniquement les chemises avec le code couleur 1, nous avons besoin de méthodes plus précises.
Une technique efficace consiste à encadrer la chaîne colors
de virgules avant la comparaison :
<code class="language-sql">SELECT * FROM shirts WHERE CONCAT(',', colors, ',') LIKE '%,1,%'</code>
Cela garantit que seul le code couleur 1, précisément délimité par des virgules, correspond.
Une autre approche efficace utilise la fonction FIND_IN_SET()
:
<code class="language-sql">SELECT * FROM shirts WHERE FIND_IN_SET('1', colors) > 0</code>
FIND_IN_SET()
vérifie directement l'existence du « 1 » dans la liste séparée par des virgules dans le champ colors
, fournissant des résultats précis. Cette méthode est généralement privilégiée pour sa clarté et son efficacité.
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!