2009-07-24 5 views
1

J'ai une requête sql qui renvoie beaucoup de résultats pour lesquels je veux générer une table html pour les afficher. Le problème est que je ne veux pas les afficher tous sur une seule page, je veux en saisir 10 à la fois et feuilleter les pages de résultats.Génération d'un rapport html à partir d'une requête SQL

Je veux retourner 100 résultats pour chaque requête, mais je ne peux pas comprendre comment obtenir les 100 prochaines sur la requête suivante.

+0

Ce à quoi vous faites référence est appelé pagination, pour référence future. –

+0

Y a-t-il une base de données/dialecte SQL particulière que vous utilisez? Le dialecte serveur/sql détermine généralement comment vous paginez un ensemble de résultats. – jrista

Répondre

1
-- return the first 100 rows 
SELECT * FROM table LIMIT 0, 100 

-- return the next 100 rows 
SELECT * FROM table LIMIT 100, 100 

-- and the next 
SELECT * FROM table LIMIT 200, 100 

Ce que vous devez faire est de passer une variable à votre script qui va créer l'instruction SQL appropriée LIMIT pour chaque page.

1

Vous définissez en bas une limite. Pour la première page:

LIMIT 0,100 

Deuxième page

LIMIT 100,100 

et ainsi de suite.

Lorsque vous allez mettre le lien 'Suivant' sur la page, faites un paramètre $ _GET qui dit start = 100. Ensuite, utilisez ce paramètre start comme première valeur de limite, et ajoutez-y 100 pour obtenir la deuxième valeur.

Ainsi, à la fin il ressemblerait à ceci:

if(empty($_GET['start'])) 
{ 
    $start = 0; 
} 
else 
{ 
    $start = $_GET['start']; 
} 

$SQL = "SELECT * FROM TABLE WHERE 1=1 LIMIT ".$start.",100;"; 

query($sql); 

$link = "<a href=\"?start=".$start+100."\">Next</a>"; 

Si vous voulez développer sur cette plus loin, vous pouvez ajouter un paramètre num. Cela permettrait aux utilisateurs de contrôler le nombre d'enregistrements qu'ils voient. Donc:

if(empty($_GET['start'])) 
{ 
    $start = 0; 
} 
else 
{ 
    $start = $_GET['start']; 
} 
if(empty($_GET['num'])) 
{ 
    $start = 100; 
} 
else 
{ 
    $start = $_GET['num']; 
} 

$SQL = "SELECT * FROM TABLE WHERE 1=1 LIMIT ".$start.",".$num.";"; 

query($sql); 

$link = "<a href=\"?start=".$start+100."&num=".$num."\">Next</a>"; 

Bien sûr, vous voudriez sanatize/valider tous ces nombres.

+1

Le deuxième paramètre de LIMIT est le nombre de lignes renvoyées, pas la limite supérieure. – sixthgear

+0

Fixé. Je n'ai jamais su cela, merci. –

0

Vous devez utiliser l'instruction LIMIT sql. En utilisant une requête comme SELECT * FROM table LIMIT $ var, 100, alors l'url est /page.ext?page=2. utilisez get (c'est-à-dire, $ _GET ['page'] en php), et multipliez ce nombre par 100, pour obtenir la valeur $ var. De toute évidence, vous devrez sécuriser cela.

Questions connexes