PHPページング原理の詳細な説明

黄舟
リリース: 2016-12-14 13:26:24
オリジナル
1082 人が閲覧しました

Webプログラムとしては、会員データや記事データなど無数のデータを扱うことが多いですが、会員数が数十人程度であれば、1ページに表示することができます。 Web サイトに複数のメンバーがいる場合、メンバーがすべて 1 つのページで開かれると、ブラウザーとビューアの両方にとって苦痛になります。さらに、データが数億ある場合、クエリを実行することになります。データベースから一度取得すると、サーバーに多大な負荷がかかります。これは正しいアプローチではありません。

PHP を学習する初心者は誰でもページネーションについて頭を悩ませることになると思いますが、Momo の投稿を読めば、きっと頭を撫でて「ページネーションがとても簡単だったことが分かりましたね?」と言うでしょう。実際、今すぐ新鮮な空気を深呼吸して、サイレンスが少しずつ説明するのを注意深く聞いてください。

1,000個のデータを処理して各ページに10個ずつ表示したいとします。この場合、まずmysqlで10個の情報を抽出する方法を見てみましょう。

Select * from table limit 0,10

上記は非常に単純な mysql クエリステートメントであり、その機能は table という名前のテーブルから 10 個のデータを抽出し、すべてのフィールドの値を取得することです。リミット 0,10 の使用法は、リミットの開始点、抽出される量です

重要な部分はこの段落の「リミット 0,10」です。ここで、0 は開始点で、次の 10 は 10 個のデータを表示します。データの場合、10 を開始点として使用する必要があり、20 番目のデータを書き込むにはどうすればよいでしょうか?

おそらく多くの人は「10、20 個まで」とはっきり言うでしょう。ああ、これは間違っています。正しい書き方は「limit 10,10」です。この後のパラメータは終了点ではなく、抽出される数値です。

10 個のデータを抽出する方法がわかったので、1,000 個を抽出するには、この種のクエリを 100 回実行することになります。つまり、次のクエリを実行することになります:

Limit 0,10 //First page
Limit 10,10 // 2 ページ目
リミット 20,10 //3 ページ目
リミット 30,10 //4 ページ目
...
何かパターンが見えますか?はい、最初のパラメータはページをめくるたびに 10 ずつ増加しますが、2 番目のパラメータは変更されません。
つまり、ページ数に応じて最初のパラメータの値を変更してみると、ページ単位でデータを表示できるということになりますが、原理はとても簡単でしょうか?

しかし、ページ数に応じて最初のパラメータの値を変更するにはどうすればよいでしょうか?まず、ページ番号の値が必要です。これは、URL の GET メソッドを使用して取得できます。
たとえば、index.php?page=18
この種の URL アドレスはどこでも見られるので、ほとんどの人がよく知っていると思います。page パラメーターの機能は、表示するページ数を渡すことです。 。

コードの一部を通してそれがどのように実装されるかを見てみましょう:

[php]

/*

著者: Silently
日付:2006-12-03

*/

$page=isset($_GET['page'])?intval($_GET['page']):1; //この文は、page=18 のページの値を取得します。ページ数は 1 です。
$num=10; //1 ページに 10 個のデータを表示します

$db=mysql_connect("host","name","pass") //データベース接続を作成します
$select=mysql_select_db("db") ,$ db); // 操作するデータベースを選択します

/*
まず、データベースを何ページに分割する必要があるかを決定するために、データベース内にあるデータの量を取得する必要があります。ページ数は
データの総数をページごとの表示で割ったものです バーの数は複数です。
つまり、10/3=3.3333=4 余りがある場合は、1 ずつ切り上げなければなりません。
*/

$total=mysql_num_rows(mysql_query("select * from table")) //クエリデータの総数 total
$pagenum=ceil($total/$num); //ページ pagenum

//渡されたページ番号パラメーター apge が合計ページ番号 pagenum より大きい場合、エラー メッセージが表示されます
If($page>$pagenum || $page == 0){
Echo "Error : ページが見つかりません .";
Exit;
}

$offset=($page-1)*$num; //最初のページが (1- の場合)、limit の最初のパラメータのオフセット値を取得します。 1)*10=0、1 ページ目 2 ページ目は (2-1)*10=10 です。 (渡されたページ数 - 1) * 各ページのデータは、limit

$info=mysql_query("select * from table limit $offset,$num ") の最初のパラメーターの値を取得します // 対応するデータを取得しますページ番号 表示するデータ
while($it=mysql_fetch_array($info)){
Echo $it['name']."
";
} //表示データ

For($i =1 ;$i<=$pagenum;$i++){

$show=($i!=$page)?" $i< ;/a>":"$i";
Echo $show." ";
}

/*ページング情報を表示します。現在のページの場合、太字の数字が表示されます。現在のページが3ページ目の場合は
1 2 3 4 5 6
*/
?>
[/php]と表示されます。
上記のコードを注意深く読んで、クエリされたテーブルを自分のものに置き換えてデータベースに接続すると、その実行結果を確認できます。

とても簡単ではないでしょうか? 頭を使えば、よりパーソナライズされた表示にすることができます。「ホームページ、前のページ、次のページ」の形式でページングを実装する方法です。 、 最後のページ"?

OK、給水ポストを満たしたら、それで終わりです。 ^_^ PHP と MYSQL のページングの原則と実装について静かに話します
==================================== ==================
概要:

プロトタイプ: テーブル制限 0,10 から * を選択
プログラム: テーブル制限 $offset,$num ($offset 値から * を選択) is: -1 で渡されるページ数 $num は各ページに表示されるデータ、more は固定の定数値です)

総ページ数: 総データ % 各ページに表示されるアイテムの数とその余り
int totalPage=((totalCount%NUM)==0)?totalCount/NUM:totalCount/NUM+1;

limit の使用法: 制限の開始点、抽出される数

ただし、必ず order を追加してください。昇順または降順でクエリを実行するようにしてください。そうしないと、Inquire をクエリするときにどちらの方向から開始すればよいかわかりません。ただし、順序には必ず注意してください。正しいものは select * from user order by id desc limit 0,10;

その他の関連記事については、PHP 中国語 Web サイト (m.sbmmt.com) にご注意ください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート