Categorías destacadas
programacion php    
Artículo
0
¡votar!

 Paginar los resultados de una consulta en PHP (III)

1 . Consulta con SQL_CALC_FOUND_ROWS
2 . Script

MySQL 4 dispone de una función que nos permite evitarnos los problemas de rendimiento que poseían las dos soluciones que hemos visto hasta el momento. Aunque tendremos que hacer dos consultas, la primera devolverá sólo los registros que deseemos mostrar y la segunda será simplemente una llamada a una función, que nos devolverá el número de registros totales que habría devuelto la consulta si no le hubiesemos puesto unos límites.

Consulta con SQL_CALC_FOUND_ROWS

La función de MySQL FOUND_ROWS() devuelve el número de filas que hubiese devuelto la última consulta si no hubiera tenido un LIMIT. Sin embargo, MySQL está optimizado para dejar de examinar registros cuando ya se han encontrado los que debe devolver. Por tanto, dado que realizar ese cálculo conllevará necesariamente un sobreprecio en tiempo de proceso, por defecto las consultas no lo realizan. Para obligarlas se utiliza SQL_CALC_FOUND_ROWS:

SELECT SQL_CALC_FOUND_ROWS * FROM tabla;

De este modo, el total lo podremos obtener con la siguiente consulta:

SELECT FOUND_ROWS();

Script

Supongamos que tenemos la función paginar, que ya completamos en el anterior artículo sobre paginación. Haremos primero la consulta con SQL_CALC_FOUND_ROWS y un límite para que sólo devuelva los registros que necesitamos. Si devuelve algún registro, será el momento de hacer una segunda consulta para averiguar el número total de registros:

<html> 
<body> 
<?php 
$link = mysql_connect("localhost", "nobody"); 
mysql_select_db("mydb", $link); 
if (!isset($pag)) $pag = 1; // Por defecto, pagina 1
$tampag = 10;
$reg1 = ($pag-1) * $tampag;
$result = mysql_query("SELECT SQL_CALC_FOUND_ROWS
  nombre, apellidos FROM clientes", $link); 
if (mysql_num_rows($result)){ 
  $result2 = mysql_query("SELECT FOUND_ROWS()", $link);
  list($total) = @mysql_fetch_array($result2);
  echo "<table border = '1'> 
"; 
  echo "<tr><td>Nombre</td><td>Apellidos</td></tr> 
";
  while ($row = @mysql_fetch_array($result)) { 
    echo "<tr><td>".$row["nombre"].
      "</td><td>".$row["email"]."</td></tr> 
"; 
  }
  echo "</table> 
"; 
  echo paginar($pag, $total, $tampag, "clientes.php?pag=");
}
else
  echo "¡ No se ha encontrado ningún registro !";
?>

De este modo tendremos el mínimo sobreprecio posible por paginar nuestras consultas.

   
Publicado por:
Administrador
Recomendar
a un amigo
Compartir
en redes
 
Comentarios
 
BBDD
Entornos de desarrollo
Entretenimiento
Herramientas
Internet
Lenguajes de script
Lenguajes imperativos
Lenguajes orientados a objeto
Otros lenguajes
Plataformas
Teoría
Varios
Copyright © 1998-2011 Programación en Castellano. Todos los derechos reservados
Datos legales | Politica de privacidad | Contacte con nosotros | Publicidad

Diseño web y desarrollo web. Un proyecto de los hermanos Carrero.

Red internet:
Juegos gratis | Servidores dedicados
Más internet: Password | Directorio de weblogs | Favicon