Pagination de resultats d'une base oracle

bsidy1 Messages postés 20 Date d'inscription mardi 29 août 2006 Statut Membre Dernière intervention 17 août 2012 - 20 avril 2009 à 17:26
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 - 21 avril 2009 à 12:59
Bonjour à tout le monde
je galère grave même, j'ai du mal à m'en sortir pour ce qui est de la pagination des resultats
provenant d'une base de données oracle
.petite explication: Je récupère une requête (qu'importe la requête sans
connaitre le nombre de champs) saisie dans zone area que je parse avant
d'executer et afficher.

le problème est quand le nombre de ligne depasse 1500 la page prend
trop de temps pour se charger alors je voudrai afficher 50 lignes par
pages En somme faire une pagination.
Je vous envoie mon code.
<strike>

</strike>if(isset($_GET[sidy1]))
{$conn=@ocilogon("sidy","sidy","INT"); //connexion à la base de données
if($conn)
{$demande = $_GET['REQUETES'];
if(preg_match("#insert|update|select#i", $demande))
{//controle des differentes requetes

$_SESSION['verif']="sidy"; $_SESSION['pass']==="barry";
// récuperation de la réquete saisie
$req=("$demande");
$ping=$parse=oci_parse($conn,$req); // parsing de la requete
if($ping){
$bon=@oci_execute($parse);// execution de la requete
}
if($bon)
{
echo'';
//je compte le nombre de ligne du rasultat
$count=0;
$parse1=oci_parse($conn,$demande);
@oci_execute($parse1);
while(oci_fetch_array($parse1))
{$count=$count+1;}

echo\"$count
\";
if((preg_match(\"#select#i\", $req)) || ($amount < 0))
{while($row=oci_fetch_assoc($parse))
{//debut de l'affichage de données
$amount=count($row);
if(!isset($colonnes))
{$colonnes = array_keys($row); echo'----
'; $nombre=count($colonnes); $dimen=100/$nombre;
foreach($colonnesas$nom)//affichage des entêtess
{
echo \"" . htmlspecialchars($nom) . ", \";
} echo'';
}
echo'----
';
foreach($rowas$value)// affichages des données
{
echo \"" . htmlspecialchars($value) . ", \";
} echo'';
} echo'
'; //fin de l'affichage de données
}
elseif(preg_match("#insert|update#i", $req))
{echo"<center>requete execute
</center>";}
else{echo"<center>Aucun enregistrement trouve
</center>";}
}
else{echo"<center>La requete n'a pu etre execute
</center>";}
 
}//controle des differentes requetes
else{echo"<center>votre requete ne peut etre execute
</center>";}
}
else{echo"<center>Impossible d'etablir la connexion
</center>";}
}

Je compte sur vous s'il vous plais ça une journée pleine que je me serre les neurones  les yeux sans rien trouver

1 réponse

DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
21 avril 2009 à 12:59
Salut,

Tu dois utiliser la requête cliente dans une sous requête et utiliser ROWNUM (le LIMIT oracle) en fixant un min et un max.

Si mes souvenirs sont bons :

SELECT *, ROWNUM AS R
FROM (REQUETE_CLIENTE)
WHERE R <= 50

Dans cet exemple, il n'y a qu'un MAX (il est possible de limiter le recordset sur un MIN mais je n'ai plus la syntaxe en tête).

Je te laisse te documenter. Si le problème persiste, j'essaierai de t'aider sur la construction de la requête.
0
Rejoignez-nous