sexta-feira, 25 de novembro de 2011

CodeIgniter - Executando Subqueries

Hi!

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