Dans MySQL, la construction d'une requête qui exclut des valeurs spécifiques basées sur une liste prédéfinie peut être délicat. Cette question aborde le problème de l'attribution d'une variable pour contenir une liste de valeurs exclues séparées par des virgules et de son utilisation dans la clause "NOT IN".
Formats de variables incorrects
Comme mentionné dans la question, l'attribution de la variable dans différents formats a échoué, entraînant soit des erreurs, soit des valeurs ignorées. Voici les formats tentés :
Le Problème
Le défi réside dans la manière dont la clause "IN" est compilée dans la requête. Lors de l'utilisation de la variable, elle se compile en une seule chaîne : WHERE id_campo not in ("817 803 495"). Cependant, le format correct pour une clause "NOT IN" nécessite des valeurs distinctes : WHERE id_campo not in ('817','803','495').
Solution : Utilisation de FIND_IN_SET()
Pour pallier ce problème, MySQL propose la fonction FIND_IN_SET(), qui permet une exclusion basée sur une liste définie dans un variable. La requête modifiée ressemblerait à ceci :
SET @idcamposexcluidos='817,803,495'; ... WHERE FIND_IN_SET(id_campo, @idcamposexcluidos) = 0
Cette solution exclut avec succès les lignes où les valeurs id_campo correspondent à n'importe quelle valeur de la variable @idcamposexcluidos.
Remarque : While FIND_IN_SET() résout le problème, il empêche l'utilisation d'index sur la colonne id_campo.
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!