2009-07-24 2 views
1

私はそれらを表示するためのhtmlテーブルを生成するための多くの結果を返すSQLクエリを持っています。問題は私が1ページにそれらをすべて表示したくないということです。私は一度に10をつかみ、結果のページをめくってみたいと思います。SQLクエリからhtmlレポートを生成する

クエリごとに100個の結果を返したいのですが、次のクエリでNEXT 100を取得する方法がわかりません。

+0

今後参考になるように、あなたが参照していることをページネーションといいます。 –

+0

使用している特定のSQLデータベース/方言はありますか? server/sqlの方言は、通常、結果セットのページ付け方法を決定します。 – jrista

答えて

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 

あなたがする必要があるのは、各ページに適切なSQL LIMITステートメントを作成する変数をスクリプトに渡すことです。

1

下に制限を定義します。

LIMIT 0,100 

2ページ目に

LIMIT 100,100 

ので:最初のページのために。

ページに「次へ」リンクを置く場合は、start = 100という$ _GETパラメータを作成します。次に、その開始パラメータをlimitの最初の値として使用し、100に2番目の値を追加します。あなたは、さらにその上に拡大したい場合は、numパラメータを追加することができます

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>"; 

だから、最後にそれは次のようになります。これにより、ユーザーは表示されるレコードの数を制御できます。したがって:

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>"; 

もちろん、すべての数値をサニタイズ/検証することもできます。

+1

LIMITの第2パラメータは、返される行の数であり、上限はありません。 – sixthgear

+0

固定。ありがとうございました。 –

0

LIMIT SQL文を使用する必要があります。 SELECT * FROMテーブルLIMIT $ varのようなクエリを使用すると、100が/page.ext?page=2というURLになります。 get(つまり、PHPでは$ _GET ['page'])を使用し、その数値に100を掛けて$ var値を取得します。明らかに、これを安全にする必要があります。

関連する問題