Hace mucho creé un script para paginar resultados de una consulta a la Db . pero el inconveniente era que cada vez que pasabas de página tenías que hacer una consulta tipo
$query_anuncios = "SELECT Location ,Title l FROM posts WHERE
CatCode='$cat' AND SubCatCode='$subcat $limit,5' ";
Es decir que tenías que definir un rango cada vez , cosa que no estaba del todo mal púes solo buscaba esa cantidad de filas que le indicabas y no todas; despúes de ver una pila de scripts que hacían los mismo , pensé en mejorar el tema realizando una sola consulta; del siguiente modo. (voy a poner los dos archivos que tengo).
//Aquí solo recibimos los resultados iniciales a mostrar y los pasamos a una función
muestra.php
Código:
Función<div id="adds"> <? if (!isset($_GET['page']) ) $page=1; else $page=$_GET['page']; show_adds( $_GET['cat'],$_GET['subcat'],$page); ?> </div>
Código:
Bueno resumiendo , con solo poner en la página que queramos paginar lo que muestro en mostrar.php podemos paginar cualquier resultado. (logicamente dentro de la función indicar la consulta a vuestra Bd etc etc).function show_adds($cat,$subcat,$city,$page) { //Guardamos la consulta entera en una variable de sesión if (!$_SESSION['adds']) $_SESSION['adds']=select_adds($cat,$subcat,$city); //numero de anucnios por página $tamaño_pag=4; //Calculamos el anuncio primero y último a mostrar //Si es la primera vez if ($page==1) { $lastAdd=5; $beginAdd=0; } else { $lastAdd=$page+5; $beginAdd=$page; $forward=$beginAdd-5; } echo "Resultados de $beginAdd <> $lastAdd"; if ($page>1) echo "<a href='$PHP_SELF?page=$forward'>Atras</a>"; if (count($_SESSION['adds'])>$lastAdd ) echo "-<a href='$PHP_SELF?page=$lastAdd'>Siguiente</a>"; for ($i=$beginAdd;$i<$lastAdd;$i++) { if ($_SESSION['adds'][$i][0] != NULL ) { //MOSTRMOS SOLO LOS RESULTADOS SI HAY DATOS echo "<p><span class='items_city'>Ciudad". $_SESSION['adds'][$i][0]."<br></p>" ; echo "<p><span class='items_city'>".$_SESSION['adds'][$i][1]."</span><br>" ; echo "<span class='items_texto'>".nl2br(ltrim(ucfirst($_SESSION['adds'][$i][2]))) ."</span><br>" ; echo "<br><span class='items_email'>Email:".$_SESSION['adds'][$i][3] ."</span><br></p>" ; } } }
Seguramente para algunos esto era ya obvio pero para muchos creo que les puede servir mi ejemplo púes como he dicho antes casi todos los scripts que hasta ahora he visto hacen la consulta una y otra vez y eso para una bd puede resultar un poco duro cuando hay muchas conexiones simultáneas.
Nota: A cada página que enlace la página donde mostráis los resultados es necesario destruir la sesión , púes si el usuario hace otro tipo de consulta es necesario destruir esta variable de sesión para que se llene otra nueva con los resultados actualizados.
Código:
Un saludo y espero os sirva esto de algo.//Si tenemos cargada una sesión anterior de resultados la eliminamos if ($_SESSION['adds']) unset ($_SESSION["adds"] );
Cualquier sugerencia para mejorar esto (que es muy muy mejorable seguro) será muy bien aceptada.