НЕ ИСПОЛЬЗОВАТЬ get()
, за которым следует last_query()
, поскольку get()
фактически выполнит запрос к базе данных.
Вместо этого используйте get_compiled_select()
, который вернет запрос, не выполняя его.
$this->db->select('IFNULL(t3.amount, t1.amount) as total');
$this->db->from('table1 as t1');
$this->db->join('table2 as t2', 't2.class = t1.class', 'LEFT');
$this->db->join('table3 as t3', 't3.student = t2.student AND t3.type = t1.type', 'LEFT');
$subquery = $this->db->get_compiled_select();
$this->db->select('SUM(TEMP.total) as total_amount');
$this->db->from('('.$subquery.') as TEMP');
$result = $this->db->get()->result_array();
По умолчанию get_compiled_select()
сбрасывает построитель запросов.
См. Документы .