Как написать запрос «где не в» с вложенным «select» с помощью класса Query Builder - PullRequest
1 голос
/ 01 мая 2020

Как мне написать следующий SQL запрос в Codeigniter и с помощью Query Builder Class

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Это будет решением, если вы строго ищете 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')

Надеюсь, это вам поможет. :)

0 голосов
/ 01 мая 2020

Класс построителя запросов 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 (ВЫБЕРИТЕ `product_id` ИЗ` покупок ")

примечание: в запросе вашего вопроса есть синтаксическая ошибка, замените AND на WHERE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...