我有一张用户数据表。用户可以“阻止”其他用户,从而拒绝他们访问其任何帖子(例如“社交媒体网站”)。
如果“ blockeduserids
”是逗号分隔列表的名称,并且其中包含的ID是整数,那么我该如何选择不阻止查看用户的用户?
我要实现的非工作示例:
SELECT * FROM users WHERE [the blocked user's ID] NOT IN blockeduserids;
答案 0 :(得分:5)
您可以在此处使用FIND_IN_SET
SELECT *
FROM users
WHERE FIND_IN_SET('blockedid', blockeduserids) = 0;
但是,通常,不希望在数据库表中保留逗号分隔的字符串。更好的设计是将每个被阻止的用户ID放在单独的表中。如果有这样一个单独的表,则可以编写:
SELECT *
FROM users u
WHERE NOT EXISTS (SELECT 1 FROM blockeduserstable b WHERE u.user_id = b.user_id);
这可能会大大优于您当前的方法。