似乎我必须再次编辑我的问题 - 这些下来的选票令人沮丧...... 我有一组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”
答案 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 (...