PHPで何件かごとに検索結果のページを分割するには
インターネットの検索エンジンなどではよく「次の10件」などのようにページを分割します。ここではこの機能を作成してみたいと思います。この機能での最重要項目はSELECT文のLIMITオプションです。LIMITは取得するレコードの取得開始位置と取得件数を指定するオプションで、この機能をうまく使うことにより簡単に検索結果のページを分割することができます。
検索対象のテーブルは引き続きtsumiki_tblを使います。ここでは、このテーブルの検索結果を10件ごとに分割して表示することにします。何十件かのデータが必要になりますので、予め適当なデータを作成しておいてください。
用意するファイルは検索条件入力フォームのbunkatsu.htmlと検索処理用スクリプトのbunkatsu.phpです。分割処理を実装するのは検索処理用スクリプトになります。
ページ分割の処理は、具体的には現在のページ番号を引き渡すことによって実現します。まず検索条件入力画面から検索条件とページ番号=0を引き渡します。このスクリプトでは、ページ番号によって取得するレコードの位置を買える仕掛けを入れておきます。
検索結果の画面には、「前の10件」「次の10件」というリンクを張りつけておきます。このリンクは、検索処理用スクリプトへのリンクでURLのクエリー文字列を使って、ページ番号と検索条件を送るようにします。「前の10件」は現在のページ番号-1を、「次の10件」には現在のページ番号+1を送るようにしておけば、次に券s買う処理用スクリプトが呼ばれたときは、ページが入れ替わって表示されるようになります。
まず、検索条件の入力画面を作成します。検索条件は名前のみで、名前のテキスト入力項目を作成します。注目すべきなのはhiddenでページ数を設定していることです。検索条件入力画面から検索して表示するのは1ページ目なので、ページ数には0を設定します。
bunkatsu.html
検索処理スクリプトは次のような内容になります。
bunkatsu.php
1. 検索処理スクリプトでは、まずはじめにSELECT文を実行します。フォームから送信された変数nmをもとにWHERE句を作成します。重要なのはその後のlimit関数です。$page_num*10というリミットのオフセット(取得済み件数)を設定しています。検索条件入力画面からこのスクリプトが実行された場合、page_numは0に設定されているため、0件目、つjまり先頭からレコードが取得されます。逆に、このpage_numを1に設定すると10件目からレコード取得が行われます。このSQL文によって具体的なレコードの分割が行われます。
2. SELECT文実行後は取得したレコードをHTMLテーブルで出力します。
3. 次に、検索条件に合致するレコードの総件数を取得します。これは、次の「総ページ数」の判定や「前の10件」の算出の際に必要になります。
4. ページ数はレコード件数($cnt)が11件以上、つまり2ページ分ある場合にのみ出力します。総ページ数はレコード件数÷10で算出しています。ceilは、小数点切り上げの関数です。
5. 「前の10件」は、現在のページ数が0以外の場合に出力します。前の10件はこのスクリプトに対してページ番号-1のリンクをはることで実現します。bunkatus.phpの後の?は「この後にクエリー文字列の変数を記述します」という意味で、ここに検索条件の$nmと現在のページ番号を-1した$page_numを指定しています。
6. 最後に「次の10件」を出力します。次の10件はまだ表示すべきレコードが存在する場合にのみ出力します。「前の10件」と同様にこのスクリプトに対してリンクをはることで実現します。次の10件の場合はpage_numを+1します。
それでは、実際に検索を行ってみましょう。ブラウザから作成したkensaku.htmlにアクセスしてみます。
1. 名前には「鈴」と入力してみましょう。
2. [検索]ボタンをクリックして検索を行います。
LIKEによるあいまい検索が実行されて、検索結果が表示されました。
RIKO's Trial Page | Shirley's i-box | Shirley's little box