Find_in_set() vs IN() : Comprendre la différence
Dans MySQL, les opérateurs FIND_IN_SET() et IN() jouent un rôle crucial dans l'interrogation des données des tables. Bien que les deux puissent être utilisés pour tester l'appartenance à un ensemble de valeurs, ils diffèrent dans la manière dont ils gèrent des scénarios spécifiques.
Considérez la requête suivante, qui vise à récupérer les noms des entreprises associées à une commande :
SELECT name FROM orders, company WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)
Cette requête génère avec succès les trois noms de société : Société 1, Une autre société et StackOverflow. Cependant, si l'on remplace FIND_IN_SET() par IN(), le résultat est inattendu :
SELECT name FROM orders, company WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)
Dans ce cas, seul le premier nom de l'entreprise, Société 1, est renvoyé. Pour comprendre pourquoi, il est essentiel de saisir les mécanismes sous-jacents de ces opérateurs.
FIND_IN_SET()
FIND_IN_SET() effectue une recherche littérale d'une valeur spécifique entre une virgule. -chaîne séparée. Dans ce cas, attachmentCompanyIDs contient une chaîne telle que « 1,2,3 ». FIND_IN_SET() renvoie la position de la valeur cible (1, 2 ou 3) dans cette chaîne, ou 0 si elle n'est pas trouvée.
IN()
IN (), d'autre part, attend une liste de valeurs à comparer à la valeur cible. Cependant, dans MySQL, attachmentCompanyIDs est une valeur scalaire, pas un tableau ou une liste. Ainsi, MySQL tente de convertir cette chaîne scalaire en un entier (le type de companyID) pour la comparaison IN().
Pendant la conversion, MySQL interprète la première virgule de la chaîne (« 1,2,3 » ) comme fin de la partie numérique, ce qui donne une valeur entière de 1. Essentiellement, la condition IN() devient effectivement :
companyID IN (1)
Cela explique pourquoi seule la première entreprise le nom, Société 1, est récupéré. La condition IN() n'est vraie que pour la première valeur de la chaîne séparée par des virgules.
Solutions
Si l'hypothèse est que le nombre de valeurs dans la virgule -Les listes séparées sont limitées, on peut utiliser des approches alternatives pour gérer efficacement de tels scénarios.
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!