ホームページ >php教程 >php手册 >モデレーターの He、Machine Democracy、lilyxie へ: ページングのメカニズムについて。

モデレーターの He、Machine Democracy、lilyxie へ: ページングのメカニズムについて。

WBOY
WBOYオリジナル
2016-06-21 09:13:421032ブラウズ

ページネーション

1. ページングの前提は、レコードが ID でソートされており、連続していないことです。たとえば、一部のレコードが削除されたり、
検索結果をページングで表示する必要があるため、ページング以外の条件があります $q
2ページング方法を決定します:
( 1): 単純な「ページの先頭、前のページ、次のページ」を使用します。
(2): 「1、2、3、4、5、6、...」を使用します。 ....end" 特定のページにジャンプするように指定します。
3. 実装分析:
(1) 最初にすべての結果をクエリすると、一部だけが表示されます。この方法は明らかに良くありません。
(2) 制限 m で使用する場合、 n はページングを実装しますが、実際の動作では、サーバーは $q 条件に従ってすべての結果を検索し、n 個の項目のみを返します。 m の後、サーバーにはまだ多くの作業があります
(3) 最適化方法は、ページの開始 $id、クエリ
"where $q and id>=$id order by id desc limit 0,$page_length"
このようにして、mysql はまず id のインデックスに従って修飾された id を見つけ、次に $q を評価します。
(4) では、$id はどこから来たのでしょうか?
(5) 表示モード 1 の場合、各ページでもう 1 つのクエリが実行され、最後のレコードの $id がその
"where $q and id>=$id order by id limit 0 ,$page_length+1"
if (mysql_num_rows($) result) > $page_length) echo "next page"
//(最後のレコードを表示しないように注意してください!)
//2 番目のページング方法を使用しない場合は、これで終了です。
(5) 表示モード 2 の場合、 $page_offset=6 ページの各ページの開始 ID を一度知る必要があります。
"select id from xxxx where $q order by id desc limit 0,$page_length*$page_offset "
for($i=0;$i *$page_length $start=mysql_result($result,$i*$page_length,0);
echo '";
if ($id==$start) echo "$i"; //現在のページ番号を強調します
else echo $ i;
echo "
";
}
(6) サーバーが $q 条件に従ってこれらのページをすべて検索したかどうかを尋ねたい人もいるかもしれません
"limit 0,$page_length" の違いは何ですか? *$pageno"? $pageno を直接使用するのは、$id ほど面倒ではありません。
答えは、セッション関数を使用して結果を保存できるということです。$q が変更されていない場合は、直接呼び出すことができます。
その必要はありません。ページを変更するたびにデータベースを廃棄します。
その後のページ判定により、上記の例は次のようになります:
//$q が変更されていない場合
$page_offset=6;
session_register($ids);
if (!$ ids) {//後続のページは実行されません
"select id from xxxx where $q order by id desc limit 0,$page_length*$page_offset+1";//後続のページがあるかどうかを判断します
for($i= $i ......
for ($i=0;$i<$page_offset;$i++){
echo ' if ($d==$ids[$i]) echo "$i"; // 現在のページ番号を強調します
else echo $i;
echo " ";
}
//次の文は自由に使用できます。ページング モード 1 に切り替えることができます
if ($ids[$page_offset])
echo '
....';
(8) 上記の結果は少し変更できます。 session_resiter($ pageno) を使用して現在のページ番号を記録します。
早送り機能と同様です。 php4 の公式バージョンがセッションでの配列の保存をサポートしているかどうかはわかりません。
implode/explode して文字列として保存します。
(8) このメソッドの利点は、高速ですが、欠点は、$q を満たす条件の総数がわからないことです。巨大なデータベースを検索するのに便利です
(9) 「最後までスキップ」を実装するには、上記の SQL ステートメントで ID で順序付けすることができます。同じ原理を実現できます。
前のページ N.
4 上記のコードまだ仮定ですので、修正していただければ幸いです。
5 この記事の中心的な考え方は、ID インデックスと ID オフセットを使用して後続のコンテンツをすばやく見つけ、データベースのオーバーヘッドを節約することです。









声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。