Obtenha a contagem total para uso com paginação para MySQL

Estou criando alguma paginação e preciso saber o número total de linhas retornadas sem o limite por página. Então, eu substituo o Limite e converto o Select * em Select ” e encapsulo isso em uma contagem de Select.

Eu sei que isso não funcionará com consultas mais complexas, mas para consultas bastante simples com um único Select, isso parece funcionar bem. Usar outra consulta para contar é mais rápido do que usar SQL CALC FOUND_ROWS como outras respostas no SO sugeriram.

Se você tiver alguma sugestão, bifurque a essência ( https://gist.github.com/Relequestual/5583353 )

(Isso é usado dentro do Codeigniter, mas pode ser facilmente adaptado para usar em qualquer coisa que você use)

$last_query = $this->db->last_query();
$pattern
= '/(.*)limit (.*)/i';
$new_query
= preg_replace ($pattern, '', $last_query);

$pattern
= '/(.*)SELECT *(.*)/';
$new_query
= preg_replace ($pattern, 'SELECT ''', $new_query);

$new_query
= 'Select Count(*) AS res From (' . $new_query . ') v__dynamic;';

$query
= $this->db->query($new_query);
$result
= $query->row();

(Esta é a minha primeira postagem no coderwall, então seja legal =])