vart001
Administrador
    
Desconectado
Mensajes: 1,553

El Mero, mero!
|
 |
« : 02 de Mayo de 2005, 04:42:19 » |
|
Paginación del resultado de un SELECT (rev.1) Esta paginación es la que se ha usado para realizar esta web, puedes verla funcionando en la página donde se listan los artÃculos.
Se basa en hacer una consulta a una Tabla y en el SELECT poner la sentencia LIMIT que lo que hace es que apartir de un número de registro coge la cantidad indicada de registros siguientes, o sea que si ponemos LIMIT 10, 15 cogera los registros del 10 al 24.
Lo que se hace en este código es llamar una página indicandole cual es el número de registro desde donde se empezará a buscar.
<?php //Conexión a la Base de datos, puede hacerse en un Include //para llamar a un fichero con la configuración, o ponerlo todo aquÃ. include ("conexio.php"); //$num es una variable con el número de página que nos pasa esta misma //página cuando pulsamos sobre los links de los n º de página. //Si $num está vacio significa que es la primera vez que entramos en //la página y le asignamos un 0. IF ($num>0) { $n=$num;} ELSE { $n=0; } //Contar cuantos registros hay $conta="SELECT id FROM documents "; $result2=mysql_query($conta,$conexio); $quants=mysql_num_rows($result2); //Buscar 15 registros $sql="SELECT * FROM documents ORDER BY id DESC LIMIT ".$n.", 15 "; $result=mysql_query($sql,$conexio); if ($row=mysql_fetch_array($result)) { echo "<TABLE BORDER='0'>"; DO { echo "<TR><TD>".$row["documento"]."</TD> </TR>"; } WHILE ($row=mysql_fetch_array($result)); echo "</TABLE>"; } //PAGINACIÓN echo "<HR><TABLE BORDER='0' ALIGN='center' WIDTH='95%'><TR>"; //Muestra por pantalla el número total de artÃculos encontrados echo "<TD ALIGN='left'> Encontrados ".$quants." artÃculos </TD>"; echo"<TD ALIGN='RIGHT'>"; echo "<FONT FACE='Arial' SIZE='-1' COLOR='#336699'>Páginas: </FONT>"; //Mientras $i no sea igual o superior al total encontrado se //incrementa de 15 en 15. $i representa el identificador en //la Tabla del número de registro que se buscará en el siguiente Select. //$a es el número de págians encontrado. FOR ($i=0; $i< $quants; $i=$i+15) { $a=$a+1; //Incrementamos el número de página //Si $n (número de registro donde empieza la busqueda actual actual) //es igual a $i se marca en negrita para resaltar la página en la que estamos. IF ($n==$i) { //Ponemos el link a la misma página peró con un número de registro cada vez diferente echo "<A HREF='doc.php?num=".$i."'>[<B>".$a."< /B>] [/url] "; } ELSE { echo "<A HREF='doc.php?num=".$i."'>' [".$a."][/url] "; } } echo "</TD></TR></TABLE>"; ?>
Revisión 1: A partir de MySQL 4 se puede usar la función found_rows(), que sirve para conocer el número total de resultados de una query sin tener en cuenta la clausula limit de la misma.
Esto es, si en una consulta ponemos limit 0,30; mysql_num_rows() devuelve como máximo 30 resultados, aunque la cláusula sin el limit devolviese muchos más.
Esto se solucionaba volviendo a cargar la query sin el limit para ver el número de resultados, con el consiguiente retraso si la consulta era lenta. Pero llamar a la función found_rows() te devuelve la cantidad de registros sin tener que realizar de nuevo la query sin escribir el limit.
Ejemplo:
supongamos que la tabla tareas tenga 300 registros: mysql_num_rows() de select * from tareas limit 0,30 devolverá 30.
Pero lo siguiente:
$consulta=mysql_query("select sql_calc_found _rows tareas.* from tareas limit 0,15"); mysql_query("select found_rows() as total_filas");
el campo total_filas devolverá los 300.
El sql_calc_found _rows es importante en la consulta inicial (sin la coma posterior: es una clausula, no el nombre de un campo)
Importante: sólo funciona a partir de la versión 4 de MySQL.
|