Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/11/2013, 02:49
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 11 meses
Puntos: 206
Respuesta: Mostrar paginados registros SQL

Se comprueba cuántas filas totales tiene la tabla. Eso y sabiendo el número de filas por pagina, sabes cuántas páginas tienes que hacer. El número de página lo pasaremos por GET, es decir, en la url mediante enlaces. Si no llega ninguno en la url, asumimos que está en la página 1. También comprobamos que el número de página no se sale de los límites (la más pequeña es uno, y la más grande es el total de páginas que acabamos de calcular.

Algunos usan dos consultas para obtener el total de registros, y en una usan el SELEC COUNT(*) FROM TABLA; pero no es la mejor solución. mysql permite que en cualquier consulta saber el total de filas de una tabla, aunque tenga un WHERE o un LIMIT que excluya filas en la consulta. Eso es así porque el motor de mysql sabe ese dato sin necesidad de consultarlo, mirando sus registros internos, La orden es SQL_CALC_FOUND_ROWS , que introducida en cualquier consulta hará que mysql meta ese dato en un registro especial que para consultar hay que ejecutar otra consulta con SELECT FOUND_ROWS(). Esto es mucho más eficiente que ejecutar el COUNT(*).

Para limitar el número de resultados de una consulta, se utiliza LIMIT, que necesita dos argumentos. El primero sirve para decirle a partir de qué número de fila debe empezar a devolver los resultados, y el segundo sirve para indicar el número de filas que nos debe devolver (si los hubiera) a partir de la fila indicada con el parámetro anterior.

Sabiendo todo esto, paginar es sencillo.

Código PHP:
Ver original
  1. <?php
  2.  
  3. $filasPagina=10;
  4. $pagina=max(0,(int)$_GET["p"]-1);
  5. $offset=$pagina*$filasPagina;
  6. $totalPaginas=ceil($total/$filasPagina);
  7. $pagina=min($totalPaginas,$pagina);
  8.  
  9. $sql = "SELECT SQL_CALC_FOUND_ROWS id, nombre, edad FROM alumno LIMIT $offset, $filasPagina";
  10. $sql2 = "SELECT FOUND_ROWS() as total";
  11.  
  12. $resultado= mysql_query($sql);
  13. $resultado2  = mysql_fetch_assoc(mysql_query($sqlTotal));
  14. $total = (int)$resultado2 ["total"];
  15.  
  16. $alumnos=array();
  17. while ($fila = mysql_fetch_assoc($resultado))
  18. {
  19.     $alumno=array(
  20.         "id"=>$fila["id"],
  21.         "nombre"=>htmlentities($fila["nombre"]),
  22.         "edad"=>$fila["edad"]
  23.     );
  24. }
  25. ?>
  26. <ul>
  27.     <?php foreach ($alumnos as $alumno) { ?>
  28.     <li><?php echo $alumno["id"]." - ".$alumno["nombre"]." - ".$alumno["edad"]; ?></li>
  29.     <?php } ?>
  30. </ul>
  31. <br/>
  32. <?php for( $i=1; $i<=$totalPaginas; $i++) { ?>
  33. <a href="?p=<?php echo $i; ?>"> <?php echo $i; ?> </a>
  34. <?php } ?>