How to translate this query to CodeIgniter query builder?
I'm having a hard time assembling this query in CodeIgniter, can someone give me a little help?
select
venda_itens.secao, venda_itens.secao_nome,
sum(venda_itens.qtd_itens_finalizada) as qtd_itens,
sum(venda_itens.qtd_itens_cancelada) as qtd_itens_cancelados,
sum(case when venda_itens.preco_desconto_cancelada is not null then
venda_itens.preco_desconto_cancelada else venda_itens.preco_total_cancelada end) as valor_canceladas,
sum(case when venda_itens.preco_desconto_finalizada is not null
then venda_itens.preco_desconto_finalizada else venda_itens.preco_total_finalizada end) as valor_total
from vendas as v
join (
select
v.id as venda_id,
v.status,
vi.secao, vi.secao_nome,
sum(case when v.status = "finalizada" then vi.quantidade end) as qtd_itens_finalizada,
sum(case when v.status = "cancelada" then vi.quantidade end) as qtd_itens_cancelada,
sum(case when v.status = "finalizada" then vi.preco_desconto end) as preco_desconto_finalizada,
sum(case when v.status = "finalizada" then vi.preco_total end) as preco_total_finalizada,
sum(case when v.status = "cancelada" then vi.preco_desconto end) as preco_desconto_cancelada,
sum(case when v.status = "cancelada" then vi.preco_total end) as preco_total_cancelada
from vendas as v
join vendas_itens as vi on vi.vendas_id = v.id
where (v.data_venda between '2018-04-02 00:00:00' and '2018-04-02 23:59:59')
and (vi.secao between 1 and 30)
group by vi.secao
) as venda_itens on venda_itens.venda_id = v.id
where (v.data_venda between '2018-04-02 00:00:00' and '2018-04-02 23:59:59')
and (venda_itens.secao between 1 and 30)
group by venda_itens.secao
order by v.data_venda desc, venda_itens.secao;
0
Author: Cyro Dubeux, 2018-04-02
1 answers
Follows the solution I found to use the query with the CodeIgniter Query builder, Using the date and Section dynamically. If someone has a better solution, just comment.
public function resumo_secao($data)
{
$where = '';
if (
!empty($data['data_inicial']) &&
!empty($data['data_final']) &&
!empty($data['secao_inicial']) &&
!empty($data['secao_final'])
) {
$where =
'where (v.data_venda between "' . $data['data_inicial'] . '" and "' . $data['data_final'] . '") and
(vi.secao between ' . $data['secao_inicial'] . ' and ' . $data['secao_final'] . ')';
} elseif (
!empty($data['data_inicial']) &&
!empty($data['data_final'])) {
$where =
'where (v.data_venda between "' . $data['data_inicial'] . '" and "' . $data['data_final'] . '")';
} elseif (
!empty($data['secao_inicial']) &&
!empty($data['secao_final'])
) {
$where =
'where (vi.secao between ' . $data['secao_inicial'] . ' and ' . $data['secao_final'] . ')';
}
$this->db->select('
venda_itens.secao, venda_itens.secao_nome,
sum(venda_itens.qtd_itens_finalizada) as qtd_itens,
sum(venda_itens.qtd_itens_cancelada) as qtd_itens_cancelados,
sum(case when venda_itens.preco_desconto_cancelada is not null then
venda_itens.preco_desconto_cancelada else venda_itens.preco_total_cancelada end) as valor_canceladas,
sum(case when venda_itens.preco_desconto_finalizada is not null
then venda_itens.preco_desconto_finalizada else venda_itens.preco_total_finalizada end) as valor_total
');
$this->db->from('vendas v');
$this->db->join('
(select
v.id as venda_id,
v.status,
vi.secao, vi.secao_nome,
sum(case when v.status = "finalizada" then vi.quantidade end) as qtd_itens_finalizada,
sum(case when v.status = "cancelada" then vi.quantidade end) as qtd_itens_cancelada,
sum(case when v.status = "finalizada" then vi.preco_desconto end) as preco_desconto_finalizada,
sum(case when v.status = "finalizada" then vi.preco_total end) as preco_total_finalizada,
sum(case when v.status = "cancelada" then vi.preco_desconto end) as preco_desconto_cancelada,
sum(case when v.status = "cancelada" then vi.preco_total end) as preco_total_cancelada
from vendas as v
join vendas_itens as vi on vi.vendas_id = v.id
' . $where . '
group by vi.secao
) as venda_itens
', 'venda_itens.venda_id = v.id', 'inner', null);
if (!empty($data['data_inicial']) && !empty($data['data_final'])) {
$this->db->where('v.data_venda >=', $data['data_inicial']);
$this->db->where('v.data_venda <=', $data['data_final']);
}
if (!empty($data['secao_inicial']) && !empty($data['secao_final'])) {
$this->db->where('venda_itens.secao >=', $data['secao_inicial']);
$this->db->where('venda_itens.secao <=', $data['secao_final']);
}
$this->db->where('v.status =', 'finalizada');
$this->db->group_by('venda_itens.secao');
$this->db->order_by('qtd_itens', 'desc');
$this->db->order_by('v.data_venda', 'desc');
$this->db->order_by('venda_itens.secao');
$this->db->limit(60);
$response = $this->db->get();
return $response->result();
}
0
Author: Cyro Dubeux, 2018-04-04 12:38:35