Foros del Web » Programando para Internet » PHP »

Paginacion PHP-ORACLE

Estas en el tema de Paginacion PHP-ORACLE en el foro de PHP en Foros del Web. Hola foro, tratare de explicar bien lo que necesito hacer. Para la aplicacion que desarrolo necesito hacer una paginacion de resultados. Trabajo con PHP y ...
  #1 (permalink)  
Antiguo 10/03/2005, 12:40
Avatar de pablod  
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 118
Antigüedad: 20 años
Puntos: 0
Paginacion PHP-ORACLE

Hola foro, tratare de explicar bien lo que necesito hacer.

Para la aplicacion que desarrolo necesito hacer una paginacion de resultados.
Trabajo con PHP y Oracle 9i.

Necesito saber como limitar una consulta en Oracle, esto le he hecho en MySQL ya que incluye la clausula LIMIT, en SQLServer se incluye TOP, pero en Oracle no se como se puede hacer, he provado con ROWNUM pero no me sirve y no se si se a la opcion correcta.

Tengo esta consulta que es la que lleva limites

SELECT RUT, NOMBRE, APELLIDO_PATERNO, APELLIDO_MATERNO
FROM USUARIOS_CLIENTES
WHERE ACTIVA=2
AND ROWNUM >= $inicial
AND ROWNUM <= $cantidad


$inicial ==> es una variable dinamica, que me indica que registros mostrar (del 1 al 10 del 10 al 20 por ejemplo)

$cantidad => es fija y representa el n° de registros que mostrare en cada pagina en este caso es 10

Como lo hago, con esta query resulta solo al mostrar los primeros 10, pero despues no muestra nada ya que la condicion que ROWNUM >=10 AND ROWNNUM <=10, y obviamente no muestra nada.

ESTOY BLOQUEADO, SUGERENCIAS PORFA

GRACIAS
__________________
Pablod:-)
  #2 (permalink)  
Antiguo 10/03/2005, 12:51
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 19 años, 1 mes
Puntos: 0
prueba rapido hacer esto:

$final = $inicial + $cantidad;
SELECT RUT, NOMBRE, APELLIDO_PATERNO, APELLIDO_MATERNO
FROM USUARIOS_CLIENTES
WHERE ACTIVA=2
AND ROWNUM >= $inicial
AND ROWNUM <= $final

Fijate si anda.
Suerte
  #3 (permalink)  
Antiguo 10/03/2005, 14:14
Avatar de pablod  
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 118
Antigüedad: 20 años
Puntos: 0
Re:

HE PROBADO LO QUE ME DIJISTE

****************
$final = $inicial + $cantidad;
SELECT RUT, NOMBRE, APELLIDO_PATERNO, APELLIDO_MATERNO
FROM USUARIOS_CLIENTES
WHERE ACTIVA=2
AND ROWNUM >= $inicial
AND ROWNUM <= $final
**********

ES UNA BUENA IDEA, AHORA LA CONSULTA ME INDICA QUE ESTAN LEYENDO DEL 1 AL 10 LUEGO DEL 10 AL 20 Y ASI. EL PROBLEMA ES QUE SOLO ME MUESTRA LOS PRIMEROS 10 REGISTROS, PRUEBO DIRECTAMENTE LA CONSULTA EN UN EDITOR DE SQL Y NO RETORNA RESULTADOS. QUIZAS USAR EL ROWNUM NO ES LO MAS ADECUADO

GRACIAS, CUALQUIER COSA ME AVISAS

UN SALU2 PABLO
__________________
Pablod:-)
  #4 (permalink)  
Antiguo 22/03/2005, 12:41
Avatar de Rocket  
Fecha de Ingreso: diciembre-2001
Ubicación: Santiago, Chile
Mensajes: 272
Antigüedad: 22 años, 4 meses
Puntos: 4
hola, a mi me pasa lo mismo
lo pudiste arreglar?
  #5 (permalink)  
Antiguo 22/03/2005, 13:20
Avatar de pablod  
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 118
Antigüedad: 20 años
Puntos: 0
Hola Rocket, luego de darle y darle vueltas al asunto logre realizar la paginacion con Oracle.

Te resumo como lo hice:

La paginación la deje tal cuál, lo que hice fue agreagar otra condición al despliegue de los resultados.

Esta es la consulta que hago:

$cmdstr2 = "SELECT RUT, NOMBRE, APELLIDO_PATERNO, APELLIDO_MATERNO
FROM USUARIOS_CLIENTES
WHERE ACTIVA=2
ORDER BY APELLIDO_PATERNO";

$parsed2 = ociparse($db_conn, $cmdstr2);
ociexecute($parsed2);
$nrows2 = ocifetchstatement($parsed2, $results2);

Luego condiciono de esta forma para mostrar los resultados.

$cont = $inicio;
while( ( $cont < ( $inicio + $limite ) ) && ( $cont < $nrows2 ) ) {

=> con esto contador se mueve mostrando 10 registros por página hasta llegar al total de registros almacenados en $nrow2.

Por esto, yo decia que mi problema no era la paginación, sino como hacer la condición para que me mostrara 10 resultados por página.

Bueno si me entediste, o tu problema va por el lado de como paginar me avisas, para mandarte un codigo de ejemplo.

Salu2 P4blo
__________________
Pablod:-)

Última edición por pablod; 22/03/2005 a las 13:22
  #6 (permalink)  
Antiguo 02/05/2008, 13:21
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
Re: Paginacion PHP-ORACLE

Buenas,
La forma correcta de establecer limites para obtener un cierto rango de datos empleando Oracle 9, 10 es la siguiente:

select *
from ( select a.*, ROWNUM rnum
from ( QUERY_A_EJECUTAR ) a
where ROWNUM <= LIMITE_FINAL )
where rnum > LIMITE_INICIAL;

Donde,
QUERY_A_EJECUTAR es la query que desean ejecutar.
LIMITE_INICIAL es a partir de que valor se desean traer datos
LIMITE_FINAL es la cantidad de datos a traer desde el limite inicial.

Un ejemplo:

Deseo traer la segunda tanda de registros, mostrando 10 registros por pagina de la tabla clientes.

select *
from ( select a.*, ROWNUM rnum
from ( select * from clientes ) a
where ROWNUM <= 20)
where rnum > 10;

Dicha consulta trae los registros desde el 11 al 20 inclusive.

Si se desea dar un orden a los datos se debe agregar el ORDER BY al final del query a ejecutar.

Espero les sirva.

Para mas información al respecto consulten: http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html

Saludos a todos
Matias Ballester
  #7 (permalink)  
Antiguo 02/05/2008, 13:43
Avatar de farra  
Fecha de Ingreso: marzo-2008
Ubicación: Aqui estoy
Mensajes: 574
Antigüedad: 16 años, 1 mes
Puntos: 20
De acuerdo Re: Paginacion PHP-ORACLE

nose en ORACLE pero en SQL2000 tampoco permite Limit y se hace asi:

Código PHP:

$limite
="20";

$consulta="SELECT     TOP $limite Codpro, Nompro
FROM         PRODUCTOS
WHERE     (Nompro LIKE '$nompro%')
ORDER BY Nompro ASC"
;

$rsprod=$adodb_conn->Execute($consulta); 
Usando el comando TOP
  #8 (permalink)  
Antiguo 02/05/2008, 14:05
 
Fecha de Ingreso: mayo-2008
Mensajes: 2
Antigüedad: 15 años, 11 meses
Puntos: 0
Re: Paginacion PHP-ORACLE

Buenas,
El problema es que Oracle no permite usar la instruccion TOP para limitar datos, solo sirve para SQL Server.

Saludos
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 09:58.