Я думаю, что проблема (по крайней мере с двойным `) в том, что CodeIgniter не очень хорош с подзапросами и тому подобным. По сути, каждый раз, когда вы получаете скомпилированный оператор select, он уже имеет escape-идентификаторы, а затем вы помещаете его в оператор from в конце, который добавит дополнительные escape-идентификаторы поверх этого.
`->from('('.$query1." UNION ALL ".$query2.') X')`
К сожалению, в отличие от других методов, таких как set
, from
не имеет 2-го параметра, который позволяет установить escape-значение на false (что, я думаю, вам нужно).
Я предлагаю попробовать это:
$this->db->_protect_identifiers = FALSE;
$this->db->select('COUNT(id) as stud_count')
->from('('.$query1." UNION ALL ".$query2.') X')
->group_by('X.id');
$results = $this->db->get();
$this->db->_protect_identifiers = TRUE;
, а также посмотрите на это: ->where(condition 2);
, который, я уверен, не должен компилироваться из-за отсутствия кавычек. Вы, вероятно, не хотите, чтобы это сбежало, поэтому вы можете сделать ->where('condition 2', '', false);
согласно: https://www.codeigniter.com/user_guide/database/query_builder.html#CI_DB_query_builder::where
Когда все остальное терпит неудачу, просто знайте, что CodeIgniter имеет некоторые ограничения для «продвинутых» запросов, и что, возможно, вам следует выписать его вручную в виде строки, используя $this->db->escape_str(...)
для экранирования ввода пользовательского ввода и $this->db->query(...)
для запуска SQL .