Foros del Web » Programando para Internet » PHP »

Paginación con PHP + SQL 2005

Estas en el tema de Paginación con PHP + SQL 2005 en el foro de PHP en Foros del Web. Hola a todos, verán, tengo un sistema que esta diseñado para utilizar MySql como gestor principal. Sin embargo por motivos laborales tenemos que usar SQL ...
  #1 (permalink)  
Antiguo 19/10/2009, 11:25
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Paginación con PHP + SQL 2005

Hola a todos, verán, tengo un sistema que esta diseñado para utilizar MySql como gestor principal. Sin embargo por motivos laborales tenemos que usar SQL Server ahora. Hemos trabajado en el pase a sql y casi todo esta listo faltando solo la paginación.

El sistema tiene alrededor de 600 registros que a su vez tiene otros registros dentro (repositorio de datos) por lo cual con Mysql utilizamos la paginación para no mostrar todos los datos de un solo golpe, esto usando LIMIT:

La sintaxis es algo asi:

$sql->query("SELECT * from $default->owl_xxxx_table where parent = '$parent' $whereclause order by name $sLimit");

Lamentablemente esto en sql server no funciona, hemos tratado con algo como lo siguiente:

$sql->query(" SELECT * FROM (SELECT TOP($end) *, ROW_NUMBER() OVER (ORDER BY name) AS RowNum FROM $default->owl_xxx_table where parent = '$parent' $whereclause) x WHERE x.RowNum BETWEEN $beg AND $end");

ó

$sql->query("SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY name) AS rn,* FROM $default->owl_xxx_table where parent = '$parent' $whereclause ) AS sub WHERE rn >= $beg AND rn <= $end");

Tenemos varias paginas (1,2,3,4,5,etc), cada una debería mostrar 10 registros
con lo anterior (claro esta que tenemos dos variables una nextfolders y otra record_per_page q son las de la consulta como $beg,$end) si hago click en la primer página me muestra los 10 registros sin problemas, pero si doy click en 2 me muestra solo 1 y en 3 ya no me muestra nada.

Conocen alguna forma de solventar este problema de paginación, o si tengo algun error en la consulta.



Saludos,
  #2 (permalink)  
Antiguo 19/10/2009, 13:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Paginación con PHP + SQL 2005

En MySQL la paginacion se hace mediante: LIMIT registro-inicial,registros-a-leer
En MSSQL Seria: LIMIT registros-a-leer OFFSET registro-inicial
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 19/10/2009, 16:11
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Paginación con PHP + SQL 2005

Primero que nada gracias por tu respuesta,
Te comento que no soy muy experto en PHP, y si de casualidad tienes solo una linea de código de ejemplo te lo agradeceria.

Saludos,
  #4 (permalink)  
Antiguo 19/10/2009, 16:29
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Paginación con PHP + SQL 2005

Muestra como estas armando la consulta para MySQL... en la variable $sLimit tienes la solucion, solo hay que adaptarlo a MSSQL y listo.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 20/10/2009, 06:31
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Así es como estaría el Limit
$sLimit = "LIMIT $nextfolders,$default->records_per_page"; esas dos variables las recojo de valores definidos por el administrador y la consulta seria la siguiente:
$sql->query("SELECT * from $default->owl_folders_table where parent = '$parent' $whereclause order by name $sLimit");

Prove haciendo algo como lo siguiente, y no me reconoce ni la palabra Limit ni el offset:

SELECT * from folders where parent = '1' order by name Limit 2 OFFSET 0

Última edición por GatorV; 20/10/2009 a las 09:34
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:39.