我如何在Codeigniter中使用Query Builder类编写以下SQL查询?
SELECT * FROM products AND id NOT IN (SELECT product_id FROM purchases)
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`)
注意。 你的问题的查询有一个语法错误,替换为 AND
与 WHERE
如果你想严格地找寻的,这将是一个解决方案 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_in
而 where_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')
希望这能帮助你。)