Paginação de resultados com PHP/Oracle

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”);

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: