bueno el caso es el siguiente, me tope con un problema al diseñar una pagina web, en una consulta a mi bd me regresaba un numero de registros muy grande, por lo cual la mejor opcion es paginar, pero el problema fueron varios:
El primero es que mi base de datos esta en MS SQL Server, y los paginadores que encontre y a los que me mandaban desde ester foro estaban orientados a MySQL
En segundo lugar me dije, ps modificamos el paginador de mysql para usarlo con mssql, pero estos paginadores se basaban en el uso de sentencias Select y en mi caso uso procedimientos almacenados por lo cual descarte esa opcion
Y en tercer lugar desconosco mucho sobre procedimientos almacenados y ademas no puedo modificar el que estaba usando(por diversos motivos).
Asi que la opcion ke me kedaba o la opcion por la que opte fue la manipulacion del mssql_query. asi que cree una funcion la cual manipula, muy precariamente a este resultado.
bueno, basicamente funciona asi
el metodo recibe dos parametros, el segundo es de menor importcia, lo uso para definir a que if entrara el programa, pero el primer parametro es el numero de pagina actual.
function paginar($pagina,$reporte)
luego dentro del metodo, declaro algunas variables
$porPagina=0; // es una variable que me ayuda a definir cuando se completo el numero de registros por pagina (por fefault 20)
$desde=($pagina*20)-20; // para saber desde que registro empesare a desplegar
$link=conectarse(); // para conexion
aqui es donde se pone un poco inutil mi funcion, ya que ejecuta un query sobre la base de datos
$sql="exec spr_AuxiliarClientes ".$_SESSION['sucursal'].",'".$_SESSION['cliente']."',0,0,'".$_SESSION['del']."','".$_SESSION['al']."','n','sa',0,0,0";
$_SESSION['query']=mssql_query($sql);
despues, dependiendo de las variables anteriores, ejecuto un for para pocicionarme en el registro en el cual debe de iniciar a mostrar los registros para la pagina actual
for ($i=0;$i<$desde;$i++)
$row=mssql_fetch_row($_SESSION['query']);
simplemente el for va ignorando los registros.
despues de esto el siguiente valor que me regrese la variable query sera el primer valor a mostrar en mi pagina y es cuando ya empieso a mostrar los valores
while(($row=mssql_fetch_row($_SESSION['query'])) && $porPagina<=19)
{
/////////
$porPagina++;
}
y simplemente mando a llamar a la funcion desde donde quiero que se visualicen las paginas con
paginar($pagina,'auxiliar clientes');
como ven, es algo infuncional la funcion, debido a que cada que mande a llamar al metodo hace el query y si se esta paginando es obviamente por que son demaciados registros, por lo cual es una carga grande para el servidor
pero me funciona, y ps si alguien tiene alguna idea son bienvenidas
la idea original que yo tenia(y se puede ver el em metodo) era guardar el resultado del query en una variable global, y evitarme el estar ejecutando el query
aqui el codigo completo
Código:
bueno esta es una idea que a mi me funciono, si aguien tiene alguna idea de mejorarlo adelante.function paginar($pagina,$reporte) { $porPagina=0; // es una variable que me ayuda a definir cuando se completo el numero de registros por pagina (por fefault 20) $desde=($pagina*20)-20; // para saber desde que registro empesare a desplegar $link=conectarse(); // para conexion if ($reporte=='auxiliar clientes') { $sql="exec spr_AuxiliarClientes ".$_SESSION['sucursal'].",'".$_SESSION['cliente']."',0,0,'".$_SESSION['del']."','".$_SESSION['al']."','n','sa',0,0,0"; $_SESSION['query']=mssql_query($sql); for ($i=0;$i<$desde;$i++) $row=mssql_fetch_row($_SESSION['query']); while(($row=mssql_fetch_row($_SESSION['query'])) && $porPagina<=19) { //Manupulacion de los registros $porPagina++; } } }
PD: espero haverme explicado bien :p, si no, aqui estoy para cualquier aclaracion