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