У меня есть массив идентификаторов, и я получаю информацию об этих элементах из базы данных. Я создал цикл foreach, чтобы получить каждый элемент один за другим, а затем передать его в массив, прежде чем вернуться к контроллеру. Проблема заключается в том, что построитель запросов объединяет все идентификаторы в одном запросе.
public function get_product_by_ids($ids) {
$products = array();
foreach ($ids as $id) {
$this->db->where('product_id', $id);
$query = $this->db->get('products')->row_array();
array_push($products, $query);
}
return $products;
}
Вот результат этого кода с использованием профилировщика.
Мои идентификаторы
Array
(
[0] => 22
[1] => 18
[2] => 21
)
Произведенный запрос от профилировщика:
SELECT *
FROM `products`
WHERE `product_id` = '22'
AND `product_id` = '18'
AND `product_id` = '21'
AND `product_id` = '22'
SELECT *
FROM `products`
WHERE `product_id` = '18'
SELECT *
FROM `products`
WHERE `product_id` = '21'
Выход:
Первый пустой, потом второй до последнего.
Я попытался использовать where_in (), как для @danblack, и вот полученный запрос:
SELECT *
FROM `products`
WHERE `product_id` = '22'
AND `product_id` = '18'
AND `product_id` = '21'
AND `product_id` IN('22', '18', '21')
Вот мои новые коды:
public function get_product_by_ids($ids) {
$this->db->where_in('product_id', $ids);
$query = $this->db->get('products')->result_array();
return $query;
}
Вывод: пустой массив.