Php 如何使用查询生成器类编写带有嵌套“select”的“where not in”查询

Php 如何使用查询生成器类编写带有嵌套“select”的“where not in”查询,php,codeigniter,codeigniter-3,Php,Codeigniter,Codeigniter 3,如何在Codeigniter中使用查询生成器类编写以下SQL查询 SELECT * FROM products AND id NOT IN (SELECT product_id FROM purchases) Codeigniter的查询生成器类随函数一起提供,但不能与子查询或自定义字符串一起使用。另一方面,可以通过以下方式使用函数的自定义字符串: $query=$this->db->where('id NOT IN (SELECT `product_id` FROM `purch

如何在Codeigniter中使用查询生成器类编写以下SQL查询

SELECT * FROM products AND id NOT IN (SELECT product_id FROM purchases)

Codeigniter的查询生成器类随函数一起提供,但不能与子查询或自定义字符串一起使用。另一方面,可以通过以下方式使用函数的自定义字符串:

$query=$this->db->where('id NOT IN (SELECT `product_id` FROM `purchases`)')
                ->get('products');  
echo $this->db->last_query();die;
产出:

从'products'中选择*其中'id'不在选择'product\u id'中 `购买`


注意:您的问题的查询有语法错误,请替换为WHERE

,如果您严格寻找CodeIgniter查询,这将是一个解决方案,但如果您不介意将其与普通SQL查询混合,那么@Vickel的答案应该可以。

where_in和where_not_in希望传递一个索引数组作为第二个参数

希望这对你有帮助

//first get the data you want to ignore-
$not_in_arr = $this->db->select('product_id')->from('purchases')->get()->result();
//get the data in indexed array format-
foreach($not_in_arr as $not){
    $notin[] = $not->product_id;
}

$query = $this->db->select('*')->from('products')->where_not_in('id', $notin)->get()->result();

echo $this->db->last_query(); //returns- SELECT * FROM `products` WHERE `id` NOT IN('1', '2', '3')