その前に前回「検索アプリ」としてしか紹介?していませんでしたが、いったいどういったモノを作っていたか?というと…正直言ってこうした半公共の場では絶対書けないのですが(^^;その代わり?というかフレームワークを使うに先立って上記の本物のスクリプトとほぼ同じような機能でデータベースの内容も当り障りのないモノにしたスクリプトを使って説明したいとおもいます。
といっても別にBlogを書くためにわざわざ作ったわけではなく、実際フレームワークを試す際にまずはこのテスト用のスクリプトで作業していますので、メモとして残すにしても問題ないだろうとおもいます。
んでどういうモノか?というと単純な検索アプリです。といっても実物をどこかにアップできればいいのですが、今のところ文章だけで説明しなければならないので果たしてどの程度まで伝わるかどうか…。
データとしては2000年以降、平成の大合併とかいって各地で市町村が合併していますが、そうしてできた新市町村と合併前の旧市町村を使用しています。詳しいテーブルとかはとりあえず後述するとして、そうしたデータベースからいろいろなキーで検索できるような、まあどこにでもあるWEBの検索アプリです。
で、このようなアプリは大抵やることが決まっていて、手続き型方式?でざざっと書くとだいたい以下のとおりだとおもいます。
- 検索フォームからのデータを処理する
- データベースに問い合わせる
- 結果を整形して表示する
まあたったこれだけです。単純なテーブルから検索キーも1、2個程度で表示結果もベタで1頁表示とかなら、それこそ慣れた人なら数分で完成してしまうでしょうし、最近流行りのRoR系のフレームワークでおなじみ?のscaffoldingとかを使えばほぼ自動でできあがってしまうかとおもいます。
最初のうちは自分も割と簡単に作っていけたとおもいます。ところがある時を境にみるみるうちにスクリプトが膨らんでいき、気がついたら前述の通り自分で触るのも恐ろしいモノができあがっていました。
それでもまだバグらしいバグもなく(ただ気づいていないだけの可能性が高いですが)一応動いているからいいようなものの、これ以上、本当にちょっとでも手をつけようものなら、おそらく把握できなくなることは間違いありません。ってゆーか既にわからなくなりかけてる部分もあります。
スクリプトをざっと見た限りでは、そもそも表示系(つまりHTML部分)とロジック部が1枚のファイルになってること自体も問題ですが、FORMから受取ったデータの処理部分とか、データベースクエリの構築部分とか、表示の際の微調整?とか…、とにかく汚い汚い。
んで、ソースが汚いだけならまあ一応動いてるし、ま、いっか!とも言えるのですが、データ件数が増えてくるにつれて(テスト用のデータベースは上記の通り市町村合併のデータなのでこれ以上増えるということはないのですが、本物の方はどんどん増えていくタイプのデータだったので…)動作が許容できないくらいまで遅くなってしまいました。
具体的にどういう問題か?というと、要するにページングのやり方です。慣れた方ならこれでピンとくるとおもいますが、普通検索結果のデータを表示する際に1ページで全件表示するのではなく、結果が多い場合は適当なところで区切って数ページに分けて表示したいわけです。
で、このページングを実装する場合におそらく大きく分けて2通りの方法が考えられるとおもわれ、ひとつはとりあえずデータベースからは結果を全件取得した上でスクリプト上でページングする方法と、もうひとつはデータベースクエリの時点でLIMITなどで予め表示するデータを限定して取ってくる方法です。
やってみればわかることですが前者の方法の方が簡単です。ですが前者の方法が通用するのはせいぜい結果が200件ぐらいまで(まあ環境とかにもよるとおもいますが、自分は200件を過ぎたあたりから「これはちょっとないだろ」とおもい始めました)で、それ以上になるとやはりいくら趣味のスクリプトとはいえ見るに耐えない?状況になります。
で、後者の方法を模索することになるのですが、そもそもこの後者のページングを実装したい、というのが今回のタイトルの何をやりたかったのか?ということなのです。
次回ページングに続く…
ラベル:PHP