数组中的ID不在表中

时间:2013-11-13 10:02:30

标签: php mysql sql arrays

似乎我必须再次编辑我的问题 - 这些下来的选票令人沮丧...... 我有一组id和一个表来检查它。这是我使用的查询:

SELECT COUNT(*) FROM orders WHERE order_id IN (...

当这个数字不等于数组中的id数时,我需要从表中不存在的数组中获取这些值。有没有更好的方法来做一些临时表,并从中进行选择?

编辑:对于那些建议在第一个查询中插入NOT的人 - 我不需要我表中的所有行与数组中的值不匹配 - 我需要来自ARRAY本身的值...  例如,我有一个包含三个ID的数组 - “1”,“2”,“3”。在表中我有ids“2”和“3”。我用我的查询检查数组:

SELECT COUNT(*) FROM orders WHERE order_id IN (1,2,3)

由于此查询,我得到了数字2,这与我在数组中的ID数量不匹配,即3.我需要一个查询,它将从我提交的数组中获取缺少的id ,在这种情况下,我需要的ID是“1”

3 个答案:

答案 0 :(得分:3)

我认为没有一个干净的SQL解决方案,因为没有办法从数组中选择SELECT。但是,您可以返回表中找到 的所有ID,而不是使用临时表,而是在PHP端执行NOT

因此,将结果选择为数组$existing_orders

SELECT order_id FROM orders WHERE order_id IN (...);

然后你有:

$all_orders = array(1, 2, 3); // IDs you're looking for
$existing_orders = array(2, 3); // IDs that were found in the table

$not_existing_orders = array_diff($all_orders, $existing_orders);

print_r($not_existing_orders); // Array( [0] => 1 )

答案 1 :(得分:1)

现在好了!

然后你必须做这样的事情:

select id from order where id IN ( your list )

使用找到的值

创建第二个数组

然后使用php数组函数array_diff

答案 2 :(得分:0)

select * from orders where order_id NOT in (...