Короче говоря: возможно ли, и если это так – как я могу построить запрос, который выглядит примерно так, как этот?
SELECT * FROM a WHERE row = 1 AND (other_row LIKE '%..%' OR another_row LIKE '%..%')
В принципе, я не могу найти решение этой проблемы. Я просто не могу понять, как добавить скобки в запрос activerecords. Возможно ли это?
Мой текущий код:
$data = $this->where('row', 1) ->like('another_row', '...') ->or_where('row', 1) ->like('other_row', $search) ->get('a') ->result();
Результат:
SELECT * FROM (`a`) WHERE `row` = 1 OR `row` = 1 AND `another_row` LIKE '%...%' AND other_row` LIKE '%...%'
Вы можете попробовать это.
$query = $this->db->select('*') ->from('a') ->where('row',1) ->where("(other_row LIKE '%%' OR another_row LIKE '%%' )") ->get(); foreach ($query->result() as $row) { //do sth. }
Вы можете написать строку пользовательского запроса (из активного класса записи)
Custom string: You can write your own clauses manually: $where = "name='Joe' AND status='boss' OR status='active'"; $this->db->where($where);
Почему вы не пытаетесь это сделать:
$this->db->where("row = 1 AND (other_row LIKE '%..%' OR another_row LIKE '%..%')"); $this->db->get('a');
Это то, как вы можете писать пользовательские ГДЕ в CI. Если это не то, что нужно искать, не стесняйтесь объяснять
У меня также проблема с or_where
поэтому я просто делаю свой пользовательский запрос, например
$this->db->query("SELECT * FROM `a` WHERE `row`=1 AND (CONDITION1 OR CONDITION2)")
$sql= "SELECT * FROM `a` WHERE row = '1' AND (other_row LIKE '%" . $value . "%' OR another_row LIKE '%" . $value . "%')"; $this->db->query($sql);
Вы можете использовать следующее:
$this->db->like('title', 'match', 'before');
Он будет производить:
WHERE `title` LIKE '%match' ESCAPE '!'