Du vil gerne tage et kig på MySQL's find_in_set()
funktion:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
For at dette skal fungere, bør den kommaseparerede liste ikke indeholde anførselstegn (medmindre dine brugernavne faktisk indeholder anførselstegn) og bør ikke være udfyldt med mellemrum:
SET @valid_users := 'admin,jrock,kmicka,First Last';
For at svare direkte på dit spørgsmål om "hvorfor skulle en variabel i NOT IN
filter arbejde", er det fordi @valid_users
behandles som en streng, og når du sender den til IN()
, den bliver behandlet som en enkelt streng (dvs. ikke et sæt/liste). Med FIND_IN_SET()
, behandler den strengen i @valid_users
som et kommasepareret sæt/liste og bruger det i overensstemmelse hermed.