mysql|ページネーション|表示
最近、フォーラムの多くの人が、クエリ結果のページ分割された表示を実現する方法を尋ねています。次のコードがあなた自身のプログラムの改善に役立つことを願っています。これらのコードは MYSQL 用ですが、他の SQL に簡単に移植できます。
各プログラムの特殊性のため、MYSQL クエリでは非常に一般的なステートメントをいくつか使用します。 TABLE をテーブル名に置き換え、YOUR_CONDITION_HERE を条件ステートメントに置き換え、WHATEVER を並べ替えるフィールド名に置き換えます (もちろん、逆順に並べ替える場合は、DESC 句を追加することを忘れないでください)。
$qh=mysql_query("SELECT COUNT(*) AS rcnt FROM TABLE WHERE YOUR_CONDITION_HERE ORDER BY "); $qh);
$nr=$data["rcnt"];
//オフセットパラメータがスクリプトに渡されるかどうかを決定し、渡されない場合はデフォルト値 0
if (empty($offset))
{
$offset=0;
}
//クエリ結果 (ここにあります)ページ 20 ですが、自分で変更できます)
$result=mysql_query("SELECT id,name,phone FROM TABLE WHERE YOUR_CONDITION_HERE ORDER BY WHATEEVER LIMIT $offset, 20");
//返された 20 レコードを表示します
while ($data=mysql_fetch_array($result))
{
//コードに変更します返されたレコードを表示するために使用されます
}
//次のステップ、他のページへのリンクを書き込みます
if(!$offset) // オフセット量が 0 の場合、実行します前のページへのリンクを表示しません
$preoffset=$offset-20;
print "前のページ n";
}
//必要な合計ページ数を計算します
$pages=ceil($ nr/20) ; //$pages 変数には、必要なページ数が含まれます
for ($i=1; $i
{
$newoffset=20*$i;
print "$i n"; >
//最後のページかどうかを確認します
if ($pages!=0 && ($newoffset/20)!=$pages)
{
print "次のページ n";
}
これは、クエリ結果をページに表示する方法の一般的な概要を示しているだけです。他の機能は自分で実行できます。
2 つの点に注意してください: $PHP_SELF には offset という 1 つのパラメータしかなく、必要に応じて独自のパラメータを追加できます。このメソッドは 100 万件を超えるレコードを含むテーブルのクエリには効率的ではありません。