MySQL - 以逗号分隔数字的字符串查找数字

Mat*_*ord 1 mysql sql query-string

我有一个用户数据表.用户能够"阻止"另一个用户,拒绝他们访问他们的任何帖子(想想"社交媒体网站").

如果' blockeduserids'是逗号分隔列表的名称,并且其中包含的ID是整数,如何选择不阻止查看用户的用户?

我正在努力实现的非工作示例:

SELECT * FROM users WHERE [the blocked user's ID] NOT IN blockeduserids;
Run Code Online (Sandbox Code Playgroud)

Tim*_*sen 5

你可以FIND_IN_SET在这里使用:

SELECT *
FROM users
WHERE FIND_IN_SET('blockedid', blockeduserids) = 0;
Run Code Online (Sandbox Code Playgroud)

但是,通常,不希望在数据库表中保留逗号分隔的字符串.更好的设计是将每个被阻止的用户ID放在一个单独的表中.如果你有这样一个单独的表,你可以写:

SELECT *
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM blockeduserstable b WHERE u.user_id = b.user_id);
Run Code Online (Sandbox Code Playgroud)

这可能会大大优于您当前的方法.