Hoje eu vou mostrar uma biblioteca bem interessante que eu encontrei enquanto procurava uma forma de realizar subqueries com o Active Record do CodeIgniter.
Antes de mais nada, eu vou explicar o motivo dessa subquery:
Quando se usa o SELECT SUM() do Mysql junto com LIMIT, você precisa usar subquery para o SUM() somar apenas aquilo que foi determinado no LIMIT.
Vamos ao exemplo que NÃO funciona:
SELECT SUM('campo_numerico') FROM tabela LIMIT 25
Isso definitivamente não irá funcionar corretamente e a soma do campo numerico será realizada sobre toda a clausula WHERE (se existir) e não apenas dentro do que foi determinado no LIMIT 25.
Para funcionar, a query deve ser assim:
SELECT SUM('campo_numerico') FROM (SELECT campo_numerico FROM tabela LIMIT 25) AS subquery;
Ai sim você terá o resultado da soma do campo numerico apenas daquilo que foi determinado no LIMIT.
Nessa bibliteca, é possível realizar essa subquery usando Active Record do CodeIgniter.
https://github.com/NTICompass/CodeIgniter-Subqueries
Vejam como essa subquery ficaria com essa biblioteca em uma Model:
$this->db->select_sum('campo_numerico');
$sub = $this->subquery->start_subquery('from');
$sub->select('campo_numerico');
$sub->from('tabela');
$sub->limit(25);
$this->subquery->end_subquery('campo_numerico');
$sql = $this->db->get();
return $sql->result();
Simples não?
Isso funcionou perfeitamente bem no meu servidor local, já no meu servidor WEB deixou a desejar e não funcionou... Ainda não descobri o porque mas assim que resolver eu posto a solução.
Mas a biblioteca é muito boa!
Vale a pena conferir!
Nenhum comentário:
Postar um comentário