ホームページ  >  記事  >  バックエンド開発  >  PHPページング原理の詳細な説明

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

高洛峰
高洛峰オリジナル
2017-03-16 15:48:561711ブラウズ

この記事を読む前に、PHP の知識と MYSQL クエリ操作の基本を習得していることを確認してください。

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ページ 2 ilimit 20,10 // 3 ページ目
limit 30,10 // ページ 4
...
ルールはありますか?はい、最初のパラメータはページをめくるたびに 10 ずつ増加しますが、2 番目のパラメータは変更されません。
つまり、ページ数に応じて最初のパラメータの値を変更してみると、ページ単位でデータを表示できるということになりますが、原理はとても簡単でしょうか?

しかし、ページ数に応じて最初のパラメータの値を変更するにはどうすればよいでしょうか?まず、ページ番号の値が必要です。これは、URL の GET メソッドを使用して取得できます。

たとえば、index.php?page=18

この種の URL アドレスはどこでも見られるので、ほとんどの人がよく知っていると思います。page パラメーターの機能は、表示するページ数を渡すことです。 。

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

<?php

/*

Author:默默
Date :2006-12-03

*/

$page=isset($_GET[&#39;page&#39;])?intval($_GET[&#39;page&#39;]):1;        //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。
$num=10;         //每页显示10条数据

$db=mysql_connect("host","name","pass");           //创建数据库连接
$select=mysql_select_db("db",$db);                 //选择要操作的数据库

/*
首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,总页数 具体的公式就是
总数据数 除以 每页显示的条数,有余进一 。
也就是说10/3=3.3333=4 有余数就要进一。
*/

$total=mysql_num_rows(mysql_query("select * from table")); //查询数据的总数total
$pagenum=ceil($total/$num);      //获得总页数 pagenum

//假如传入的页数参数apge 大于总页数 pagenum,则显示错误信息
If($page>$pagenum || $page == 0){
       Echo "Error : Can Not Found The page .";
       Exit;
}

$offset=($page-1)*$num;         //获取limit的第一个参数的值 offset ,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。             (传入的页数-1) * 每页的数据 得到limit第一个参数的值

$info=mysql_query("select * from table limit $offset,$num ");   //获取相应页数所需要显示的数据
While($it=mysql_fetch_array($info)){
       Echo $it[&#39;name&#39;]."<br />";
}                                                              //显示数据

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

       $show=($i!=$page)?"<a href=&#39;index.php?page=".$i."&#39;>$i</a>":"<b>$i</b>";
       Echo $show." ";
}

/*显示分页信息,假如是当页则显示粗体的数字,其余的页数则为超连接,假如当前为第三页则显示如下
1 2 3 4 5 6
*/
?>

上記のコードを注意深く読み、データベース接続とクエリ テーブルを自分のものに置き換えると、その実行効果がわかります。

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

概要:

プロトタイプ: テーブル制限 0,10 から * を選択 プログラム: テーブル制限 $offset,$num から * を選択 ($offset 値は: -1 で渡されるページ数 $num は各ページ表示されるデータはほとんど固定の定数値です)
総ページ数: total data % 各ページに表示される項目数、超過分
int totalPage=((totalCount%NUM)==0)?totalCount/NUM:totalCount/ NUM+1;
使用制限: 開始点、抽出する数値を制限します

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

PHP ページング原理の詳細な説明と関連記事については、PHP 中国語 Web サイトに注目してください。

関連記事:

PHPを使った簡単なページングクラスの実装と詳しい使い方

phpページング PHPページング表示制作の詳しい解説

phpページングクラスのコード

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