1. はじめに
Web プログラミングのベテランにとって、この種のコードを書くのは呼吸するのと同じくらい自然なことですが、初心者にとっては、この問題についてよく混乱するため、特別にこれを書きました この記事では、この問題について詳しく説明し、この記事を読んだ友人にページング表示の原理と実装方法を理解してもらえるよう努めます。この記事は初心者が読むのに適しており、すべてのサンプル コードは PHP で書かれています。
2. PHP 記事のページングの原則
いわゆるページング表示とは、データベース内の結果セットが表示のために人為的にセグメントに分割されることを意味します:
1 ページあたりのレコード数 ($)ページサイズ)?
現在のページ ($CurrentPageID) は何ページですか?
これで、別の結果セットを提供していただければ、特定の結果を表示できます。
前のページ ($PreviousPageID)、次のページ ($NextPageID)、総ページ数 ($numPages) などの他のパラメーターについては、すべて前述の内容に基づいて取得できます。
mysql データベースを例に挙げると、テーブルから特定のコンテンツを取得したい場合は、select * from table limit offset, rows を使用できます。次の一連の SQL ステートメントを見て、ルールを見つけてください。
最初の10レコード: select * from table limit 0,10
11番目から20番目のレコード: select * from table limit 10,10
21番目から30番目のレコード: select * from table limit 20,10
…
これSQL ステートメントのセットは、実際には、$PageSize=10 の場合にテーブル内の各ページからデータをフェッチするための SQL ステートメントです。このようなテンプレートを要約すると、次のようになります。
このテンプレートを使用して、対応する値を挿入し、上記の一連の SQL ステートメントと比較して、該当するかどうかを確認してください。データを取得する方法という最も重要な問題を解決したら、あとはパラメータを渡し、適切な SQL ステートメントを作成し、PHP を使用してデータベースからデータを取得して表示するだけです。以下、具体的なコードを用いて説明していきます。
3. PHP 記事ページング用の簡単なコード次のコードを詳しく読んで、自分でデバッグして実行してください。一度変更して、検索などの独自の機能を追加するのが最善です。
<ol class="dp-xml"> <li class="alt"><span><span class="tag"><</span><span> ?php </span></span></li><li><span>// 建立数据库连接 </span></li><li class="alt"><span>$</span><span class="attribute">link</span><span> = </span><span class="attribute-value">mysql_connect</span><span>("localhost", <br />"mysql_user", "mysql_password") </span></li><li><span>or die("Could not connect: " . mysql_error()); </span></li><li class="alt"><span>// 获取当前页数 </span></li><li><span>if( isset($_GET['page']) ){ </span></li><li class="alt"><span>$</span><span class="attribute">page</span><span> = </span><span class="attribute-value">intval</span><span>( $_GET['page'] ); </span></li><li><span>} </span></li><li class="alt"><span>else{ </span></li><li><span>$</span><span class="attribute">page</span><span> = </span><span class="attribute-value">1</span><span>; </span></li><li class="alt"><span>} </span></li><li><span>// 每页数量 </span></li><li class="alt"><span>$</span><span class="attribute">PageSize</span><span> = </span><span class="attribute-value">10</span><span>; </span></li><li><span>// 获取总数据量 </span></li><li class="alt"><span>$</span><span class="attribute">sql</span><span> = </span><span class="attribute-value">"select count(*) as amount from table"</span><span>; </span></li><li><span>$</span><span class="attribute">result</span><span> = </span><span class="attribute-value">mysql_query</span><span>($sql); </span></li><li class="alt"><span>$</span><span class="attribute">row</span><span> = </span><span class="attribute-value">mysql_fetch_row</span><span>($result); </span></li><li><span>$</span><span class="attribute">amount</span><span> = $row['amount']; </span></li><li class="alt"><span>// 记算总共有多少页 </span></li><li><span>if( $amount ){ </span></li><li class="alt"><span>if( $amount </span><span class="tag"><</span><span> $page_size ){ $</span><span class="attribute">page_count</span><span> = </span><span class="attribute-value">1</span><span>; } </span></li><li class="alt"><span>//如果总数据量小于$PageSize,那么只有一页 </span></li><li><span>if( $amount % $page_size ){ </span></li><li><span>//取总数据量除以每页数的余数 </span></li><li class="alt"><span>$</span><span class="attribute">page_count</span><span> = (int)($amount / $page_size) + 1; </span></li><li class="alt"><span>//如果有余数,则页数等于总数据量除以每页数的结<br />果取整再加一 </span></li><li><span>}else{ </span></li><li class="alt"><span>$</span><span class="attribute">page_count</span><span> = $amount / $page_size; </span></li><li class="alt"><span>//如果没有余数,则页数等于总数据量除以每页数的结果 </span></li><li><span>} </span></li><li class="alt"><span>} </span></li><li><span>else{ </span></li><li class="alt"><span>$</span><span class="attribute">page_count</span><span> = </span><span class="attribute-value">0</span><span>; </span></li><li><span>} </span></li><li class="alt"><span> </span></li><li><span>// 翻页链接 </span></li><li class="alt"><span>$</span><span class="attribute">page_string</span><span> = </span><span class="attribute-value">''</span><span>; </span></li><li><span>if( $</span><span class="attribute">page</span><span> == 1 ){ </span></li><li class="alt"><span>$page_string </span><span class="attribute">.</span><span>= </span><span class="attribute-value">'第一页|上一页|'</span><span>; </span></li><li><span>} </span></li><li class="alt"><span>else{ </span></li><li><span>$page_string </span><span class="attribute">.</span><span>= </span><span class="attribute-value">'<a href=?page=1>第一页</a><br>|<a href=?page='</span><span>.($page-1).'</span><span class="tag">></span><span>上一页</span><span class="tag"></</span><span class="tag-name">a</span><span class="tag">></span><span>|'; </span></span></li> <li class="alt"><span>} </span></li> <li> <span>if( ($</span><span class="attribute">page</span><span> == $page_count) || ($</span><span class="attribute">page_count</span><span> == 0) ){ </span> </li> <li class="alt"> <span>$page_string </span><span class="attribute">.</span><span>= </span><span class="attribute-value">'下一页|尾页'</span><span>; </span> </li> <li><span>} </span></li> <li class="alt"><span>else{ </span></li> <li> <span>$page_string </span><span class="attribute">.</span><span>= </span><span class="attribute-value">'<a href=?page='</span><span>.($page+1).'</span><span class="tag">><br></span><span>下一页</span><span class="tag"></</span><span class="tag-name">a</span><span class="tag">></span><span>|</span><span class="tag"><</span><span class="tag-name">a</span><span> </span><span class="attribute">href</span><span>=?</span><span class="attribute">page</span><span>=</span><span class="attribute-value">'.$page_count.'</span><span class="tag">></span><span>尾页</span><span class="tag"></</span><span class="tag-name">a</span><span class="tag">></span><span>'; </span> </li> <li class="alt"><span>} </span></li> <li><span>// 获取数据,以二维数组格式返回结果 </span></li> <li class="alt"><span>if( $amount ){ </span></li> <li> <span>$</span><span class="attribute">sql</span><span> = </span><span class="attribute-value">"select * from table order by id desc <br>limit "</span><span>. ($page-1)*$page_size .", $page_size"; </span> </li> <li class="alt"> <span>$</span><span class="attribute">result</span><span> = </span><span class="attribute-value">mysql_query</span><span>($sql); </span> </li> <li><span> </span></li> <li class="alt"> <span>while ( $</span><span class="attribute">row</span><span> = </span><span class="attribute-value">mysql_fetch_row</span><span>($result) ){ </span> </li> <li><span>$rowset[] = $row; </span></li> <li class="alt"><span>} </span></li> <li><span>}else{ </span></li> <li class="alt"> <span>$</span><span class="attribute">rowset</span><span> = </span><span class="attribute-value">array</span><span>(); </span> </li> <li><span>} </span></li> <li class="alt"><span>// 没有包含显示结果的代码,那不在讨论范围,<br>只要用foreach就可以很简单的用得到的二维数组来显示结果 </span></li> <li> <span class="tag">?></span><span> </span> </li> </ol>
以上がPHP記事ページネーションの関連実装方法です。
http://www.bkjia.com/PHPjc/446034.html