Curso de PHP

Estás en: Paginar Resultados : Paginar los resultados

Paginar los resultados

Para paginar los resultados de un select que no necesita parámetros, hay que hacer lo siguiente:
- Controlar si entramos en la página 1 o en posteriores
- Crea variables:
   -> Número total de registros
   -> Cantidad de resultados por página
   -> Registro de inicio
   -> Crear SQL con LIMIT inicio, cantidad
- Listar resultados
- Mostrar navegador

Es recomendable enviar estos datos por GET, porque al paginar y al ir alante y atrás, si lo cogemos por POST se perdería

<table width="450" border="1" align="center">
  <tr>
    <td width="150">NUMERO ID</td>
    <td width="150">POBLACION</td>
    <td width="150">CONTINENTE</td>
  </tr>
  
<?php

if (!$_GET) {
	$pagina=1;
}else {
	$pagina=$_GET["pag"];
}

//  -----------------------  CONSULTA  -----------------------

$sql="SELECT p.continente, c.continente_id, p.pais_id, p.pais_poblacion, c.continente_nombre
FROM pais p, continente c
WHERE p.continente=c.continente_id
ORDER BY c.continente_nombre, p.pais_poblacion";

//  -----------------------  EJECUCION DE LA CONSULTA  -----------------------

$resultado=mysql_query($sql);  // TABLA COMPLETA

$total_registros=mysql_num_rows ($resultado); // Nos dice cuántos registros hay en total

$cantidad_reg=3; // Cantidad de registros por página

$registro_inicio= ($pagina-1) * $cantidad_reg; 
// Página en la que estamos x el número de registros que mostramos por página.
// Esto nos indica en el registro en el que nos tenemos que posicionar.

// Definimos de nuevo la consulta SQL LIMITADA
$sql.=" LIMIT $registro_inicio, $cantidad_reg";  // Añade la limitación al sql que había antes
// Si hay comillas dobles encerrando el select, dentro podemos poner las variables, 
// sin tener que hacer concatenaciones. 
// Si el valor es texto, puede ir la variable entre las comillas simples

$resultado=mysql_query($sql);  

if ($resultado) {
   $fila=mysql_fetch_array ($resultado)
   ?>  
	
   <tr>
      <td><? echo $fila ["pais_id"]?></td> <!--No hay que poner p.pais_id, si no, da error  -->
      <td><? echo $fila ["pais_poblacion"]?></td>
      <td><? echo $fila ["continente_nombre"]?></td>
   </tr>
   <?php
   while ($fila=mysql_fetch_array ($resultado)) { 
   ?>  
   <tr>
      <td><? echo $fila ["pais_id"]?></td>
      <td><? echo $fila ["pais_poblacion"]?></td>
      <td><? echo $fila ["continente_nombre"]?></td>
   </tr>
   <?php
   }
}else {
   echo mysql_error();
}

?>
  
</table>

<div class="paginado">
   <? 
      echo paginar ($pagina, $total_registros, $cantidad_reg, "listar_paginado.php?pag=");
      // Cuando necesitamos que liste dependiendo de un parámetro de búsqueda, porque el 
	  // select está parametrizado, habría que ponerlo de la siguiente manera:
      //echo paginar2 ($pagina, $total_registros, $cantidad_reg, "listar_paginado.php?id=4&pag=");
   ?>
</div><!--paginado -->