Aqui está um pequeno script que criei para a cadeira de Base de Dados utilizando PHP e o motor de base de dados Oracle.
Provavelmente não é a solução óptima para o problema visto ter de fazer duas queries à base de dados, mas foi a maneira que encontrei de conseguir por isto a funcionar. Em MySQL a segunda query seria simplificada através da função LIMIT, que permitiria uma visualização mais fácil do código, mas visto tar a trabalhar em uma base de dados Oracle teve de ser assim mesmo…
Script em PHP que pega em resultados de uma query à tabela “table” e divide por páginas:
$nres = 5; // numero de resultados a mostrar por pagina
$c = ocilogon($user, $pass, $host); // ligação à base de dados
if(isset($_GET[‘page’])){
$p_ant = $_GET[‘page’] -1; // página anterior
$p_seg = $_GET[‘page’] +1; // página seguinte
$s = oci_parse($c, “select * from table); // seleccionar todos os resultados
oci_execute($s, OCI_DEFAULT);
$cont = 1;
while(oci_fetch($s)) $cont++; // conta o numero de resultados da query
$pag_max = $cont/$nres; // calcula o numero de paginas
// se não estiver na primeira página, mostra o link para a anterior
if($_GET[‘page’]>1)
echo “<a href=’index.php?page=”. $p_ant . “‘>Pagina anterior</a> “;
echo “<a href=’index.php’>Home</a> “;
// semelhante ao anterior, se não estiver na última página, mostra um link para a página seguinte
if($pag_max>$_GET[‘page’])
echo “<a href=’index.php?page=”. $p_seg . “‘>Pagina seguinte</a>”;
echo “<br/><br/>”;
// query que trata de buscar os elementos que se encontram entre pagina-1*$nres e pagina*$nres
$q = “select * from ( select a.*, rownum rnum
from ( select * from table ) a
where rownum <= ” . $_GET[‘page’]*$nres . ” )
where rnum >” . ($_GET[‘page’]-1)*$nres;
$s = OCI_Parse($c, $q);
OCI_Execute($s, OCI_DEFAULT);
while (OCI_Fetch($s)) {
// efectuar acções com os dados
}
else header(“Location: ../index.php?page=1”);
Filed under: Informatica, Web | Tagged: oracle, paginação, php | Leave a comment »