-1

看来我必须再次编辑我的问题 - 这些反对票越来越令人沮丧......我有一组 id 和一张表格来检查它。这是我使用的查询:

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

当这个数字不等于数组中的 id 数时,我需要从我拥有的数组中获取那些在表中不存在的值。有没有比制作一些临时表并从中选择更优化的方法呢?

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

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

作为这个查询的结果,我得到了数字 2,这与我在数组中的 id 数(即 3)不匹配。我需要一个查询来从我提交的数组中获取缺少的 id,在这个如果我需要的 id 是“1”

4

3 回答 3

3

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

所以选择这个结果到一个数组中,$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 )
于 2013-11-13T10:04:17.447 回答
1

好的,现在很清楚了:

然后你将不得不做这样的事情:

select id from order where id IN ( your list )

使用找到的值创建第二个数组

然后使用php数组函数array_diff

于 2013-11-13T10:48:45.230 回答
0
select * from orders where order_id NOT in (...
于 2013-11-13T10:04:19.217 回答