所以我有一个名为id的列表,在极少数情况下,列出的很多ID(20到140个不同的ID)不需要/不能显示给用户。这都是基于不同的权限。
SELECT * FROM `table` WHERE (`id` != 21474 OR 26243 OR 78634) AND `checked` = 5
不幸的是,DB中的其他任何地方都没有额外的分组,允许我一次调出这部分ID。所以我在寻找是否有更好的方法来解决这个问题,或者我是否应该忽略在mysql / SELECT语句中执行此操作,而是在拉出所有内容之后在PHP语句中执行此操作。以后使用PHP foreach的问题是被拉出的数据可能是数百行,因此它会真正减慢页面速度。正如你在上面的mysql查询中看到的那样,我想在一个巨大的声明中列出ID,但我想也许有更好的方法来解决这个问题。 100 ORs听起来不是最好的解决方案。
答案 0 :(得分:10)
使用IN关键字
SELECT * FROM `table` WHERE `id` NOT IN (21474, 26243, 78634) AND `checked` = 5
答案 1 :(得分:1)
IN
语句很好,但是如果查询结果太长,请注意不要碰到服务器的max_allowed_packet
选项。