Это моя проблема: MySQL «Или» Условие
Решение состоит в группировке операторов OR, но я использую CodeIgniters Active Record. Есть ли способ группировать операторы OR с помощью Active Record? Или я должен сам написать запрос?
 Я использую $this->db->where() с $this->db->or_where() 
Он пишет запрос следующим образом:
 WHERE title = 'foobar' AND category = 2 OR category = 3 
но мне нужно:
 WHERE title = 'foobar' AND (category = 2 OR category = 3) 
Я не могу этого сделать:
 $this->db->where("title = 'foobar' AND (category = 2 OR category = 3)"); 
потому что я добавляю ORs, используя цикл foreach
Вы можете сделать это вручную, как указано здесь :
Пользовательская строка: вы можете написать свои собственные статьи вручную:
$ where = "name = 'Joe' AND status = 'boss' OR status = 'active'";
$ This-> db-> где ($ где);
Что касается вашего вопроса:
 $this->db->where("category = 1 AND (category = 2 OR category = 3)"); 
В 3.0-dev :
 $this->db->select() ->group_start() ->or_like([ 'category' => 2, 'category' => 3 ]) ->group_end() ->where([ 'category' => 1 ]); 
  См. Ответы на этот вопрос, если вы используете CI 2.2.  Выберите ответ, отличный от принятого . 
Или просто попробуйте следующее :
 $categories = array(2, 3); array_walk($categories, function(&$cat) { $cat = 'category = ' . $cat; }); $catstring = implode(" OR ", $categories); $where = "category = 1 AND ($catstring)"; // => category = 1 AND (category = 2 OR category = 3) $this->db->where($where); 
  как указано в OP, вы генерируете ИЛИ, используя foreach (array) вы можете просто использовать 
  $cat_array=array(2,3,4,5,6,7); $this->db->select('col1, col2')->from('table')->where("col1",1)->where_in('col2', $cat_array); 
будет генерировать
 SELECT `col1`, `col2` FROM (`table`) WHERE `col1` = 1 AND `col2` IN (2, 3, 4, 5, 6, 7) 
  вы не можете манипулировать запросом на состояние, используя методы активной записи DB (где, or_where), я бы рекомендовал пройти как жало в методе where() 
 $this->db->where("category = 1 AND (category = 2 OR category = 3)"); 
  В Code Igniter версии 3.0-dev вы можете добавлять группы в любой запрос с помощью group_start и group_end : 
 $this->db->select('col1, col2') ->where("category = 1") ->group_start() ->where("category = 2") ->or_where("category = 3") ->group_end(); 
Производит:
 SELECT `col1`, `col2` FROM `table_name` WHERE category = 1 AND (category = 2 OR category = 3);