Paginación con Php y Sql server 2008

Me veo en un dilema con PHP Y SQL SERVER 2008 ...
Bueno el tema principalmente es que no tengo la mas mínima idea sobre como paginar los resultados de un sql query, e estado todo el día con este tema sin obtener un resultado.. E buscado
Por la web, pero la gran mayoría son para mysql, lo cual he tratado de
Adaptar a mssql pero sin obtener resultado, lo otro es que podría haber sido con un procedimiento almacenado pero también están mal explicados.. Por lo cual llego a un punto
En que no se como continuar. Por favor se que aquí hay muchos expertos para php ... Y recurro a uds por que se que me podrían ayudar. De
Verdad que me tiene loco este tema y si me pudiesen guiar y orientar ...
Me sera de muchísima ayuda... De todas maneras pondré el código que
Utilizo para hacer la consulta :

<fieldset>
<legend>Lista de clientes</legend>
 <td><table width="554" border="1" cellspacing="3" cellpading="4" bgcolor="#999999">
 <td width="30" bgcolor="#333333">Cod Barra</td>
 <!--td width="99" bgcolor="#333333">Nº OT</td-->
 <td width="99" bgcolor="#333333">Nº Doc</td>
 <td width="130" bgcolor="#333333">Nombre</td>
 <td width="99" bgcolor="#333333">Referencia OT</td>
 <td width="99" bgcolor="#333333">Estado</td>
 <td width="99" bgcolor="#333333">Motivo</td>
 <?
//CONSULTA FORMULARIO BUSQUEDA
$consNueva="select * from TB_Web where cliente='".$descrip_cliente."'";
if($n_ot !="" and $Ref_ot !="" and $fecha_ingreso !="" and $codbarr !="" and $n_doc!="" and $nom !="" and $dir!="" and $com!=""
 and $extra1!="" and $extra2!="" and $estad!="" and $mot_obj!="" )
{$consNueva=$consNueva."and N_ot='".$n_ot."'"."and Ref_ot='".$ref_ot."'"."and fecha_ingreso='".$fecha_ingreso."'"."and Cod_Barra='".$codbarr
."'"."and ndoc='".$n_doc."'"."and nombre='".$nom."'"."and direccion='".$dir."'"."and comuna='".$com."'"."and extra_1='".$extra1
."'"."and extra_2='".$extra2."'"."and estado='".$estad."'"."and motivo_obj='".$mot_obj."'" ;}
elseif($n_ot !=""){$consNueva=$consNueva."and N_ot='".$n_ot."'" ; }
elseif($Ref_ot !=""){$consNueva=$consNueva."and Ref_ot='".$ref_ot."'" ; }
elseif($fecha_ingreso !=""){$consNueva=$consNueva."and fecha_ingreso='".$fecha_ingreso."'" ; }
elseif($codbarr !=""){$consNueva=$consNueva."and Cod_Barra='".$codbarr."'" ; }
elseif($n_doc!=""){$consNueva=$consNueva."and ndoc='".$n_doc."'" ; }
elseif($nom !=""){$consNueva=$consNueva."and nombre='".$nom ."'"; }
elseif($dir!=""){$consNueva=$consNueva."and direccion='".$dir."'" ; }
elseif($com!=""){$consNueva=$consNueva."and comuna='".$com."'" ; }
elseif($extra1!=""){$consNueva=$consNueva."and extra_1='".$extra1."'" ; }
elseif($extra2!=""){$consNueva=$consNueva."and extra_2='".$extra2."'" ; }
elseif($estad!=""){$consNueva=$consNueva."and estado='".$estad."'" ; }
elseif($mot_obj!=""){$consNueva=$consNueva."and motivo_obj='".$mot_obj."'" ; }
///////////////////////////////////
 // Consulta antigua $SQL2 ="select top 5 * from tb_web where id_cliente='".$idCliente."'"; 
$result2=mssql_query($consNueva); 
$numRegistros=mssql_num_rows($result2);
$valor="0";
if ($numRegistros >4){
echo"hay mas de 2 registro";
echo"<br>";
echo '<a href="#"><<</a>|<a href="#"><</a> ||<a href="#">>></a><a href="#">></a>';
}
?>
 <form name="fo" method="post" action="2.php" >
 <?
While($row2=mssql_fetch_array($result2)){ 
 ?>
 <tr onMouseOver="this.style.backgroundColor='#666666' " onMouseOut="this.style.backgroundColor=''; this.style.color='White' " >
 <td>
 <input type="submit" name="checkCodBarra" value="<? Echo $row2 ['Cod_Barra'] ?>" />
 <input type="hidden" name="id" value="<? Echo $row2 ['id_cliente'] ?>" />
 <input type="hidden" name="nombre" value="<? Echo $row2 ['nombre'] ?>" />
 <input type="hidden" name="n_ot" value="<? Echo $row2 ['N_ot'] ?>" />
 </td>
 <!--td valign="top"><? Echo $row2 ['N_ot'] ?></td-->
 <td valign="top"><? Echo $row2 ['ndoc'] ?></td>
 <td valign="top"><? Echo $row2 ['nombre']?></td>
 <td valign="top"><? Echo $row2 ['Ref_ot']?></td>
 <td valign="top"><? Echo $row2 ['estado']?></td>
 <td valign="top"><? Echo $valor ?></td>
 <?
 ++$valor; 
 ?>
 <script type="text/javascript">
maximoCheckboxarCheckbox(document.forms.fo.check,1);
</script>
 <?
}
?>
</table>
 </tr>
</table>
<p>
</form>
</p>
</fieldset>

1 respuesta

Respuesta
1

El concepto de paginación es sencillo, pero suele atragantarse porque no se aborda correctamente. Normalmente la mayoría de la gente piensa que debe recuperar todos los registros de la DB y luego irlos mostrando poco a poco, cuando lo correcto es ir recuperándolos poco a poco y mostrando. En lugar de un SELECT normal que nos retorna todas las ocurrencias, hay que poner unos limites a la consulta, un límite inferior que corresponderá al primer elemento mostrado en cada página y un limite en el numero de resultados obtenidos, que va a determinar el numero de resultados por página. Lo que tienes que almacenar son el indice principal, que determina desde donde en la tabla vas a mostrar en cada momento, y luego una constante que determinará cuantos registros recuperar en la consulta para luego mostrarlos (resultados por pagina).

SELECT por,y,z FROM tabla WHERE id= indice_primario ORDER BY id ASC LIMIT const_lines_x_pagina+1

Se entiende que cada registro tiene un campo id único e incremental, al final de cada pagina cuando muestras los datos, debes almacenar el id del ultimo registro y pasarlo a indice_primario, pues puede que algún elemento halla sido borrado y la lista no sea completa (ejem 1,2,3,5,8,10) observa que se usa un +1, al mostrar debes mostrar el numero de pagina que necesitas (4,5, X) pero debes recuperar un registro más, para tener el id de la primera página del siguiente registro.

Para volver atrás debes cambiar ligeramente la consulta, pues al poder faltar registros que han sido borrados, la secuencia id puede ser discontinua como en el ejemplo, luego:

SELECT x,y,z FROM tabla WHERE id= indice_primario ORDER BY id DESC LIMIT const_lines_x_pagina+1

La única diferencia es que cambiamos el orden a descendente, de esta forma obtenemos los registro ordenados de forma que siempre obtenemos const_lines_x_pagina (si lo hay) independientemente de los id's borrado. Lógicamente habrá que recorrer los resultados al revés para mostrar correctamente los registros.

gracias por tu respuesta aunque yo utilizaba php con sql server 2008,

por lo cual no tiene la instrucción limit...

pero de todas maneras me pudo dar un camino para seguir.

Gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas