Recherche dans un champ séparé par des virgules dans MySQL
Dans MySQL, certains scénarios peuvent survenir dans lesquels les données sont stockées dans un format séparé par des virgules , malgré les pratiques recommandées qui le déconseillent. Cela pose des problèmes lorsqu'on tente d'effectuer des recherches précises dans de tels domaines. Prenons l'exemple suivant :
Une table contient un champ avec des valeurs d'une autre table stockées sous forme de liste séparée par des virgules :
12,13,14,16
La tâche à accomplir consiste à rechercher des valeurs spécifiques dans cette champ à l'aide d'une requête telle que :
SELECT ... WHERE field LIKE '%1%'
Cependant, en raison de la nature des données, une telle requête correspondrait à presque toutes les entrées, car les identifiants les plus courants se situent dans une plage étroite.
Pour résoudre ce problème, une recherche plus spécifique est nécessaire. Au lieu d'utiliser %1%, envisagez d'utiliser %,1,% dans la condition LIKE. Cela correspondra aux valeurs contenant 1 précédé et suivi d'une virgule.
Malheureusement, cette approche présente des limites pour la première et la dernière valeur de la liste séparée par des virgules, car elles ne seront pas mises en correspondance par le modèle.
Par conséquent, une approche différente est nécessaire. MySQL fournit une fonction puissante appelée FIND_IN_SET, qui permet de rechercher dans une liste séparée par des virgules :
SELECT ... WHERE FIND_IN_SET('1', field)
L'utilisation de FIND_IN_SET renverra la position de la valeur spécifiée dans la liste séparée par des virgules, ou 0 si la la valeur n’est pas présente. Cela permet des recherches précises et efficaces même dans des structures de données non idéales.
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!