आप MySQL के find_in_set()
समारोह:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, @valid_users);
इसके लिए काम करने के लिए, अल्पविराम से अलग की गई सूची में उद्धरण नहीं होने चाहिए (जब तक कि आपके उपयोगकर्ता नाम में वास्तव में उद्धरण न हों) और रिक्त स्थान के साथ गद्देदार नहीं होने चाहिए:
SET @valid_users := 'admin,jrock,kmicka,First Last';
सीधे अपने प्रश्न का उत्तर देने के लिए "NOT IN
. में एक वेरिएबल क्यों होगा? फ़िल्टर कार्य", ऐसा इसलिए है क्योंकि @valid_users
एक स्ट्रिंग के रूप में माना जा रहा है और जब आप इसे IN()
. पर पास करते हैं , इसे एकल स्ट्रिंग के रूप में माना जा रहा है (अर्थात सेट/सूची नहीं)। FIND_IN_SET()
के साथ , यह स्ट्रिंग को @valid_users
. में ट्रीट करता है अल्पविराम से अलग किए गए सेट/सूची के रूप में और तदनुसार इसका उपयोग करता है।