WHERE IN
exige que l'ensemble de valeurs soit spécifié littéralement dans la requête, et non comme une valeur unique contenant une chaîne délimitée par des virgules. Si vous écrivez :
WHERE 6 IN (a.allowed_activity)
il traitera a.allowed_activity
comme une seule valeur et comparez-la avec 6
, et non comme un ensemble de valeurs multiples à rechercher.
FIND_IN_SET
recherche une chaîne délimitée par des virgules pour la valeur.
Une autre façon de le voir est que IN
est un raccourci pour un tas de =
tests combinés avec OR
:
WHERE x IN (a, b, c, d)
est l'abréviation de
WHERE x = a OR x = b OR x = c OR x = d
Lorsque vous le réécrivez comme ceci, vous pouvez voir clairement pourquoi cela ne fonctionnera pas avec une colonne contenant une chaîne délimitée par des virgules. Il se traduit simplement
WHERE 6 IN (a.allowed_activity)
à :
WHERE 6 = a.allowed_activity