【发布时间】:2018-11-12 19:00:08
【问题描述】:
我有一个用户数据表。用户可以“阻止”另一个用户,拒绝他们访问他们的任何帖子(想想“社交媒体网站”)。
如果'blockeduserids'是逗号分隔列表的名称,并且其中包含的ID是整数,如何选择不阻止查看用户的用户?
我正在尝试实现的非工作示例:
SELECT * FROM users WHERE [the blocked user's ID] NOT IN blockeduserids;
【问题讨论】:
-
请注意,您不应将其存储为逗号分隔的列表。这是一个非常有问题的设计。一个只有两列的新表,blocked_user_id 和 blocking_user_id,两列都作为主键,并且在 PK 中不是最左边的任何列上都有一个二级索引,这将更加正确和高效。当您扩大规模时,您现在正在做的事情在负载下绝对会崩溃,因为它需要扫描每一行以寻找匹配项。 (您也可以为阻止添加一个日期列,稍后可能会很方便)。然后使用左连接或
WHERE NOT EXISTS进行查询。 -
好的,谢谢。我现在正在改变这种方法。
标签: mysql sql query-string