Me parece muy complicada la tecnica, considera el siguiente ejemplo:
Código PHP:
Ver original<?php
// Ejemplo simple de paginación.
// Esta funcion realiza una paginación generica.
function paginar($query, $page, $rows)
{
// Esto es lo que se va a retornar.
$respuesta = [
"cant_resultados" => 0,
"cant_paginas" => 0,
"resultados" => []
];
// Contar cuantos registros hay.
$count = "SELECT COUNT(".(strpos($q[0], "DISTINCT") !== false ?
"DISTINCT ")."*) cant FROM ".$q[1];
// Ejecutar la query $count y guardar en $respuesta el resultado.
$respuesta["cant_resultados"] = // El resultado obtenido de la consulta.
// Verificar si hay resultados.
if($respuesta["cant_resultados"])
{
// Saber cuantas paginas hay en total.
$respuesta["cant_paginas"] = ceil($respuesta["cant_resultados"]/$rows);
$result = $query." LIMIT $rows OFFSET ".(($page-1)*$rows);
// Ejecutar la query $result y guardar en $respuesta el resultado.
$respuesta["resultados"] = // El resultado obtenido de la consulta.
}
return $respuesta;
}
// Esta query es la que quieres paginar, puedes poner todo lo que quieras, exepto la clausula LIMIT, esta se generara sola.
$query = "SELECT field1 f1, field2 f2, field3 f3 FROM table1 t1 WHERE field1 LIKE '%txt%'";
$page = 1; // La pagina actual a mostrar. Debe ser >= 1.
$rows = 20; // Cantidad de resultados por pagina. Debe ser >= 1.
$respuesta = paginar($query, $page, $rows);
echo "Cantidad de registros:<br> ";
var_dump($respuesta["cant_resultados"]); echo "Cantidad de paginas:<br> ";
echo "Registros por pagina:<br> ";
echo "Pagina actual:<br> ";
echo "Contexto:<br> ";
for($nro = $page-4; $nro < $page+4; $nro++)
{
if($nro>0 && $nro<$respuesta["cant_paginas"])
{
if($nro == $page)
echo "<b>"$nro."</b><br>";
else
echo $nro."<br>";
}
}
echo "Registros:<br> ";
Sirve para paginar cualquier consulta que quieras y es facil de usar, la funcion puedes ponerla en un archivo aparte y luego solo hacer la segunda parte.