Написать запрос с подзапросом в CodeIgniter Query Builder? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть следующий запрос, который имеет проблему с Query Builder.

SELECT Sum(TEMP.total) AS total_amount
FROM   (SELECT Ifnull(t3.amount, t1.amount) AS total
        FROM   table1 AS t1
               LEFT JOIN table2 AS t2
                      ON t2.class = t1.class
               LEFT JOIN table3 AS t3
                      ON t3.student = t2.student
                         AND t3.type = t1.type) AS TEMP 

Есть ли способ сделать это с помощью Query Builder? В настоящее время я использую этот метод.

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

Пожалуйста, проверьте это, надеюсь, вам поможет

$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');
// $this->db->get();
$lastquery = $this->db->last_query();

$this->db->select('SUM(TEMP.total) as total_amount');
$this->db->from('('.$lastquery.') as TEMP');
$result = $this->db->get()->result_array();
1 голос
/ 11 апреля 2019

НЕ ИСПОЛЬЗОВАТЬ 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() сбрасывает построитель запросов.

См. Документы .

0 голосов
/ 11 апреля 2019

Если ваш запрос mysql в порядке, используйте этот метод для выполнения сложного запроса, подобного этому.

$sql = "Your Query";
$qr = $this->db->query($sql);
return $qr->row();

Если вы все еще не получаете вывод, сначала проверьте свой подзапрос в предложении from.

...