Eu criei uma library que pega a última consulta remove o limit e
retorna o total de registros. Segue abaixo:


<?php

class MY_Pagination extends CI_Pagination {
    function total_rows() {
        $this->CI =& get_instance();

        $sql = $this->CI->db->last_query();

        $sql = 'SELECT COUNT(1) AS rows ' . substr($sql, strpos($sql, 'FROM'));
        if (strrpos($sql, 'LIMIT') !== FALSE) {
            $sql = substr($sql, 0, strrpos($sql, 'LIMIT')) ;
        }
        // return the count value
        $query = $this->CI->db->query($sql);
        $result = $query->result_array();
        if (is_array($result)) {
            $result = $result[0]['rows'];
        }
        $this->total_rows = $result;
    }
}


Salva no arquivo application/libraries/MY_Pagination.php

Claro que faz duas consultas, mas é mais rápido do que selecionar tudo
e remover o que fica fora do limite.


2008/7/10 Vinicius Cruz <[EMAIL PROTECTED]>:
> Mas, por exemplo, pra você fazer paginação desses milhares de registros, eu
> teria que fazer um query e num_rows pra pegar o total, depois fazer um query
> com limit, certo?
>
> Assim, a cada next da paginação, teria que fazer um num_rows e query com
> limit.
>
> Acabei fazendo assim: fiz um num_row, e salvei o total numa variável. Ai, a
> cada página, retorno essa variável, e faço um query com limit. =)
>
> Acho que agora ficou menos gambiarra.
>
> Vinicius
>
> 2008/7/10 Reginaldo Sousa <[EMAIL PROTECTED]>:
>>
>> Imagina a demora se a sua consulta retornar 10.000 registros ;-)
>> Muito melhor usar LIMIT no SQL e fazer duas consultas menores.
>>
>> 2008/7/10 Vinicius Cruz <[EMAIL PROTECTED]>:
>>>
>>> Galera,
>>>
>>> não sei se isso é viável, mas, por algum momento, pensei em guardar a
>>> consulta do banco, para consulta em páginas seguintes.
>>> O serialize e unserialize converte o objeto para string, podendo assim
>>> ser guardado em SESSION ou arquivo.
>>>
>>> Isso rola no CI? Em termo de performance e segurança, é viável?
>>>
>>> Bom, cheguei a esse ponto, na tentativa de diminuir tempo de resposta na
>>> paginação de um resultado de busca. Há algumas relações na tabela, e pelo
>>> que entendi, para a paginação teria que retornar o total de registro, e
>>> outra consulta com o limit a ser exibido, correto? Sendo assim, estive
>>> pensando em uma forma de realizar apenas uma consulta, e depois só tratar a
>>> faixa a ser exibido.
>>>
>>> Tá cheirando a gambiarra? =D
>>>
>>> Vinicius
>>>
>>>
>>> _______________________________________________
>>> Lista mailing list
>>> [email protected]
>>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>>
>>
>>
>>
>> --
>> Reginaldo Sousa | Desenvolvedor web
>> [EMAIL PROTECTED], [EMAIL PROTECTED]
>> (21) 8728-1850
>> _______________________________________________
>> Lista mailing list
>> [email protected]
>> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>>
>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>



-- 
Felipe Diesel
http://felipediesel.net
http://sigasw.com.br
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a