Sunteți pe pagina 1din 12

Paginacin de Consultas con Oracle y PHP 08/04/2014

IISSI 1
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas
con Oracle y PHP
Grupo de Ingeniera del Software y Bases de Datos
Departamento de Lenguajes y Sistemas Informticos
Universidad de Sevilla
abril 2014
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Objetivos del tema
Entender el concepto de consulta paginada.
Entender la necesidad de las consultas paginadas.
Conocer las distintas estrategias de paginacin de
consultas.
Ser capaz de desarrollar una consulta paginada en
Oracle y procesarla en PHP.
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 1 abril 2014
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 2
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Qu es la paginacin de consultas?
Es la divisin de los resultados de una consulta
ordenada en pginas de un determinado
tamao.


abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 2
r
e
s
u
l
t
a
d
o

c
o
n
s
u
l
t
a

pginas
tamao
de pgina
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Qu es la paginacin de consultas?
Ejemplo: Amazon


abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 3
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 3
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Qu es la paginacin de consultas?
Ejemplo: Amazon


abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 4
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Por qu usar paginacin de consultas?
Si una consulta devuelve una gran cantidad de
resultados y se envan todos al usuario
Se tardar mucho tiempo en procesar la consulta en
la base de datos y en el servidor web.
Se consumirn muchos recursos en el servidor web.
Se tardar mucho tiempo en enviar todos los datos.
Se generar mucho trfico de red.*
Probablemente, el usuario slo
prestar atencin a los primeros
datos.



abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 5
*Especialmente problemtico para la tarifas de datos mviles.
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 4
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Por qu usar paginacin de consultas?
A veces, ni siquiera sera posible visualizar todos
los resultados



abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 6
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Diseo de paginacin de consultas
Existen bsicamente tres estrategias diferentes:
Mantener el resultado en la sesin.
Mantener el resultado en el navegador.
Realizar consultas just in time de cada pgina.
Si la consulta es frecuente y los datos no se
actualizan mucho, las anteriores estrategias se
pueden combinar con el cacheado* de los
resultados.


abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 7
*Mantener una copia en la memoria del servidor del resultado de la
consulta, de forma que no haya que volverla a realizar cada vez que
un usuario la solicite (se sale del mbito de la asignatura).
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 5
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Mantener el resultado en la sesin del usuario
1. Se hace la consulta a la BD.
2. Se almacena el resultado en la sesin del usuario.
3. Se van enviando datos conforme el usuario cambia
de pgina tomndolos de la sesin.
Ventajas
Slo se accede a la BD una vez.
Inconvenientes
Se tarda en procesar la consulta y pasar los datos
desde la BD al servidor web.
Consume mucha memoria del servidor durante
mucho tiempo*.
Se desperdician recursos (al usuario slo le suelen
interesar los primeros resultados).
Se pueden mostrar datos obsoletos.





abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 8
*La mayora de las sesiones se cierran por inactividad del usuario.
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Mantener el resultado en el navegador
1. Se hace la consulta a la BD.
2. Se envan todos los datos al navegador junto con la
primera pgina del listado.
3. La paginacin se gestiona localmente mediante
Javascript.
Ventajas
Slo se accede a la BD una vez.
Los cambios de pgina son muy rpidos.
Inconvenientes
Se tarda mucho en cargar la pgina (el usuario
podra cerrar la ventana del navegador).
Se genera mucho trfico de red.
Se pueden mostrar datos obsoletos.





abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 9
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 6
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Realizar consultas just in time de cada pgina
1. Se hace la consulta a la BD correspondiente slo a
la pgina de consulta solicitada.
2. Se envan los datos de la pgina al navegador.
Ventajas
Uso eficiente de recursos en el servidor.
Minimiza el trfico de red.
Datos actualizados cada vez que se
cambia de pgina.
Inconvenientes
Consulta SQL complicada y no estndar.
Si los datos no se actualizan mucho, podra
ejecutarse la misma consulta innecesariamente.*




abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 10
*A menos que se cacheen los resultados, como se coment anteriormente.
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Cmo se hace una consulta SQL paginada?
En otros SGBDs relacionales:
Se aaden a SELECT clausulas como LIMIT, TOP y
OFFSET de forma sencilla, pero...
En Oracle:
No se implementa ninguna de ellas
En su lugar debemos usar ROWNUM
y anidar nuestra consulta dentro
de dos SELECTs.
abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 11
Any problem?
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 7
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
ROWNUM en Oracle
ROWNUM es una pseudocoluma que se puede
incluir en cualquier SELECT en Oracle.
Asigna nmeros consecutivos (empezando en 1) a
las filas del resultado de una consulta, pero
El orden de procesamiento es:





Por lo que se asigna antes de ordenar el resultado
y no se puede usar directamente para paginar.

abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 12
SELECT <columnas>, ROWNUM
FROM <tabla>
WHERE <condicin>
ORDER BY <columnas>
1
2
3
*Ms informacin sobre ROWNUM en http://viralpatel.net/blogs/oracle-pagination-using-rownum-limiting-result-set/
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Cmo lo hacemos entonces?
Segn Tom Kyte (asktom.oracle.com):

abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 13
:first
:last
SELECT *
FROM (
SELECT ROWNUM RNUM, AUX.*
FROM (




) AUX
WHERE ROWNUM <= :last
)
WHERE RNUM >= :first;
SELECT <columnas>
FROM <tabla>
WHERE <condicin>
ORDER BY <columnas>
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 8
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Funcin que pagina cualquier consulta

abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 14
function paginatedQuery( $conn, $query, $page_num, $page_size )
{
try {
$first = ($page_num - 1) * $page_size + 1;
$last = $page_num * $page_size;
$paged_query = "SELECT $query ";
$stmt = $conn->prepare( $paged_query );
$stmt->bindParam( ':first', $first );
$stmt->bindParam( ':last', $last );
$stmt->execute();
return $stmt;
}
catch ( PDOException $e ) {
// Tratamiento error
}
}
Pg. 1
$first
$last
Pg. 2
Pg. 3
Pg. 4
$page_size
$page_num
$paged_query = SELECT * FROM ( SELECT ROWNUM RNUM, AUX.* FROM ( $query ) AUX WHERE ROWNUM <= :last) WHERE RNUM >= :first;
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Funcin para el tamao de cualquier consulta

abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 15
function totalQuery( $conn, $query )
{
try {
$total_query = "SELECT COUNT(*) AS TOTAL FROM ($query)";
$stmt = $conn->query( $total_query );
$result = $stmt->fetch();
$total = $result['TOTAL' ];
return (int)$total;
}
catch ( PDOException $e ) {
// Tratamiento error
}
}
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 9
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Interfaz de usuario: consulta paginada
abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 16
cabecera
enlaces y formulario
tabla de resultados
pie
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Interfaz de usuario: consulta paginada
abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 17
cabecera
enlaces y formulario
tabla de resultados
pie
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 10
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Interfaz de usuario: gestin de errores
abril 2014 Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 18
cabecera
enlaces al inicio
Informacin del error
pie
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Parmetros y valores por defecto
Se obtienen los valores del n de pgina y del
tamao de la pgina de los parmetros del
formulario enviados con GET.
Por defecto, la 1 pgina y tamao 10.
abril 2014
<?php

$page_num = isset( $_GET[ "page_num" ] )
? (int)$_GET[ "page_num" ] : 1;

$page_size = isset( $_GET[ "page_size" ] )
? (int)$_GET[ "page_size" ] : 10;

if ( $page_num < 1 ) $page_num = 1;
if ( $page_size < 1 ) $page_size = 10;

?>
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 19
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 11
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Parmetros y valores por defecto
Se ajustan en funcin del tamao de la consulta
(resto de la divisin entera) y si se pide una
pgina inexistente.
abril 2014
<?php

$total = totalQuery( $conn, $query );
$total_pages = ( $total / $page_size );

if ( $total % $page_size > 0 ) // resto de la divisin
$total_pages++;

if ( $page_num > $total_pages )
$page_num = 1;

?>
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 20
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Generacin de enlaces
abril 2014
<?php

for( $page = 1; $page <= $total_pages; $page++ ) {
if ( $page == $page_num ) { // pgina actual
?>
<span class="current"><?=$page?></span>
<?php
} else { // resto de pginas
?>
<a href="libros.php?page_num=<?=$page?>&
page_size=<?=$page_size?>"><?=$page?></a>
<?php
}
}
?>
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 21
Paginacin de Consultas con Oracle y PHP 08/04/2014
IISSI 12
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Formulario HTML5 de tamao de pgina
abril 2014
<form method="get" action="libros.php">
<input id="page_num" name="page_num" type="hidden"
value="<?=$page_num?>"/>

Mostrando

<input id="page_size" name="page_size" type="number"
min="1" max="<?=$total?>" value="<?=$page_size?>"
autofocus="autofocus" />

entradas de <?=$total?>
<input type="submit" value="Cambiar" />
</form>
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 22
1. Qu es la
paginacin de
consultas?
2. Por qu usar
paginacin de
consultas?
3. Estrategias de
paginacin de
consultas
4. Consultas
paginadas en
Oracle
5. Consultas
paginadas en
PHP

D
i s
e

o
d
e
A
m
a
d
o
r
D
u
r

n
T
o
r
o
, 2
0
1
1

Paginacin de Consultas con Oracle y PHP
Tabla de los resultados
abril 2014
<table id="tabla_listado">
<tr>
<th>Autor</th> <th>Ttulo</th>
</tr>
<?php
foreach( $filas as $fila ) { // $filas = paginatedQuery()
?>
<tr class="libro">
<td> <?=$fila['NOMBRE']?>
<?=$fila['APELLIDOS']?> </td>
<td class="titulo"><?=$fila['TITULO']?></td>
</tr>
<?php
}
?>
</table>
Introduccin a la Ingeniera del Software y a los Sistemas de Informacin 23

S-ar putea să vă placă și