Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/10/2014, 10:52
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años
Puntos: 320
Respuesta: Paginación php

Me parece muy complicada la tecnica, considera el siguiente ejemplo:
Código PHP:
Ver original
  1. <?php
  2.     // Ejemplo simple de paginación.
  3.     // Esta funcion realiza una paginación generica.
  4.     function paginar($query, $page, $rows)
  5.     {
  6.         // Esto es lo que se va a retornar.
  7.         $respuesta = [
  8.             "cant_resultados" => 0,
  9.             "cant_paginas" => 0,
  10.             "resultados" => []
  11.         ];
  12.        
  13.         // Contar cuantos registros hay.
  14.         $q = explode("FROM", $query, 2);
  15.         $count = "SELECT COUNT(".(strpos($q[0], "DISTINCT") !== false ? "DISTINCT ")."*) cant FROM ".$q[1];
  16.        
  17.         // Ejecutar la query $count y guardar en $respuesta el resultado.
  18.         $respuesta["cant_resultados"] = // El resultado obtenido de la consulta.
  19.        
  20.         // Verificar si hay resultados.
  21.         if($respuesta["cant_resultados"])
  22.         {
  23.             // Saber cuantas paginas hay en total.
  24.             $respuesta["cant_paginas"] = ceil($respuesta["cant_resultados"]/$rows);
  25.            
  26.             $result = $query." LIMIT $rows OFFSET ".(($page-1)*$rows);
  27.            
  28.             // Ejecutar la query $result y guardar en $respuesta el resultado.
  29.             $respuesta["resultados"] = // El resultado obtenido de la consulta.        
  30.         }      
  31.        
  32.         return $respuesta;
  33.     }
  34.        
  35.     // Esta query es la que quieres paginar, puedes poner todo lo que quieras, exepto la clausula LIMIT, esta se generara sola.
  36.     $query = "SELECT field1 f1, field2 f2, field3 f3 FROM table1 t1 WHERE field1 LIKE '%txt%'";
  37.     $page = 1; // La pagina actual a mostrar. Debe ser >= 1.
  38.     $rows = 20; // Cantidad de resultados por pagina. Debe ser >= 1.
  39.    
  40.     $respuesta = paginar($query, $page, $rows);
  41.    
  42.     echo "Cantidad de registros:<br> ";
  43.     var_dump($respuesta["cant_resultados"]);
  44.     echo "Cantidad de paginas:<br> ";
  45.     var_dump($respuesta["cant_paginas"]);
  46.     echo "Registros por pagina:<br> ";
  47.     var_dump($rows);
  48.     echo "Pagina actual:<br> ";
  49.     var_dump($page);
  50.     echo "Contexto:<br> ";
  51.     for($nro = $page-4; $nro < $page+4; $nro++)
  52.     {
  53.         if($nro>0 && $nro<$respuesta["cant_paginas"])
  54.         {
  55.             if($nro == $page)
  56.                 echo "<b>"$nro."</b><br>";
  57.             else
  58.                 echo $nro."<br>";
  59.         }
  60.     }
  61.     echo "Registros:<br> ";
  62.     var_dump($respuesta["resultados"]);

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.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios