如何使用Query Builder类编写嵌套的 "select "查询 "where not in"。

问题描述 投票:0回答:1

我如何在Codeigniter中使用Query Builder类编写以下SQL查询?

SELECT * FROM products AND id NOT IN (SELECT product_id FROM purchases)
php codeigniter codeigniter-3
1个回答
1
投票

Codeigniter的查询生成器类自带的功能是 where_not_in() 但不能与子查询或自定义字符串一起使用。另一方面,你可以使用自定义字符串的 where() 这样的功能。

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

输出。

SELECT * FROM `products` WHERE `id` NOT IN (SELECT `product_id` FROM `purchases`)

注意。 你的问题的查询有一个语法错误,替换为 ANDWHERE


1
投票

如果你想严格地找寻的,这将是一个解决方案 CodeIgniter query 但如果你不介意把它和普通的SQL查询混在一起,那么@Vickel的答案应该可以做到。

//first get the data you want to ignore-
$not_in_arr = $this->db->select('product_id')->from('purchases')->get()->result();

where_inwhere_not_in 希望你能传递一个索引数组作为第二个参数。

//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')

希望这能帮助你。)

© www.soinside.com 2019 - 2024. All rights reserved.