- 締切済み
PEAR PAGERでの大量データ処理についての質問
PEAR PAGERでの大量データ処理についての質問 お世話になっております。 <実行環境> PHP=Ver5.3.1 , db=db2 , smarty使用 例)50万レコードの名称データからある文字列のデータを抽出して画面表示させるPHPですが、 1画面に表示するデータ件数=20件とした場合、抽出されたデータが1万件あった場合、 ページ数=10000/20=500ページになります。 現在、上記例の場合はデータ抽出とページ作成に長時間掛かり、使用に耐えません。 そこで時短策についてご存知の方、よろしくお願いいたします。 <基本的な質問> PEAR PAGERは対象データとして抽出された結果データ(配列)に対してのページング機能と 理解してよろしいですか? <問題解決策の質問> 小生が解決策として考えたのは下記2点なのですが、 1)抽出データのSELECT時にFETCH FIRST 500 の様に、表示対象データ件数を固定してしまい、 それ以上は新たに検索キーワードを入力し直す方法・・・これだとページは25ページで終了。 2)抽出データのSELECT時にBETWEEN m AND n の様にm件目からn件分と定義して置き、 PHPで”次頁”、”前頁”を押した時にPEAR PAGERを抜出してSELECT文を設定し直して PEAR PAGERを再実行させる方法・・・これだとPAGERはいらない? ---------------------------------- もっと簡単でスマートな方法ご存知ありませんか? PEAR PAGERの有効な使用方法をご教授頂けると幸いです。 *質問文が解り辛かったらお詫びいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
ライブラリのドキュメントに問題解決の方法が記載されております。 導入 > Pager と巨大な DB 結果セット http://pear.php.net/manual/ja/package.html.pager.intro.php サンプルコードの入ったディレクトリはご自身の環境に読み替えてください。 更に参考サイトとして外部リンクが提供されており、おそらくこれがズバリの方法です。 データベースの結果を効率よくページ化する方法 http://www.alberton.info/pear_pager_tutorial_database_results.html Pager は、データの配列にページを付けるクラスであると紹介されているので、ついその方法しかないように考えがちですが、データの配列そのものをパラメタとして与える以外にもページを付ける方法があるということです。 Pager::getOffsetByPageId(非推奨) http://pear.php.net/manual/ja/package.html.pager.getoffsetbypageid.php Pager::getPageRangeByPageId http://pear.php.net/manual/ja/package.html.pager.getpagerangebypageid.php オフセットを利用してデータベースに問い合わせをすることで結果セットも小さくなり、レスポンスは格段に良くなるでしょう。
補足
samchay様、早々のご教授ありがとうございました。 ご案内のサイトを拝見させて頂きましたが、私は英語が苦手なので全然理解出来ませんでした。 とりあえず、ソースをコピーして実行してみます。(自信ない・・・) *とにかく手掛かりになりそうです。後日結果を報告したいと思います。