[PHP-users 314] Re: 「次の50件」みたいにするためには?
Y.Watanabe
php-users@php.gr.jp
Thu, 28 Jun 2001 11:09:11 +0900
渡辺です。
みなさんいろいろとヒントありがとうございます。
「マンモス本にサンプルが・・・ないぞ?」などと思いながら
僕がペラペラめくっていた本はシーラカンス本であることに
気づくのに20分ほどかかりました。(苦笑)
俺って疲れてんのかなあと思いつつ
本屋までテクテク歩いてマンモス本買ってきました。
そんなことはさておき、いくつか方針が立ってきました。
(1) offsetとlimitの値を計算しつつそれをsession変数か
あるいは <input type=hidden...>にでも入れて「前へ」
「次へ」のsubmitボタンをつくり、「前」or「次」ページに
行くたびにそのoffset値やlimit値を使って
新たなSQL文を生成してpg_execし、検索結果を
テーブルタグ等で表示する
(2) offsetやlimitを指定せずにpg_execして、検索結果全てを
ひとつのオブジェクトに入れてしまう。つまり
$sqlresult = pg_exec($dbcon,"select * from test_tbl");
のように。
で、この$sqlresultをsession変数に入れておく。
実際に画面表示するときは$sqlresultに保存されている
オブジェクトのうちの特定の範囲の行だけを取り出すように
for文を書いてテーブルタグ等で表示する
上記2つのうちどっちをとるかで、またまた相談なのですが・・・
一般的には(1)がよく採用されていそうですが、
(1)の方法だと画面を見るたびにpg_execが走り、DBに負荷が
かかるような気がします。
(2)の方法だと、pg_execが走るのは一度だけです。
しかし、検索結果データ数によっては、$sqlresult の中身はかなりの
大きさになるでしょう。ということはApacheの負荷(メモリを
食いつぶすとか)につながりそうです。
それにそもそも、SQLの実行結果のようなオブジェクトを
session変数に入れることができるのか?という疑問もあります。
(できるようなできないような・・・?ご教授モトムです^^;)
(1)と(2)とで、どっちを採用すべきか?
どなたか、いま少し御知恵とご意見をいただけませんか?
ちなみに、最初のメールでは「1500件程度のデータ」と
書きましたが、実際、上記(2)のように一度に全部検索したときの
データ数は、
1レコードあたり1〜2Kくらいx600件くらい
といった量だと思います。
"Y.Watanabe" wrote on Wed, 27 Jun 2001 15:03:12 +0900
with Subject: [PHP-users 288] 「次の50件」みたいにするためには?
>
> 渡辺です。
> このMLにはいつもお世話になっております。
>
> 問題解決というより、参考文献やヒントがあれば
> 参考にさせて欲しいと思って投稿してます。
>
> linux + apache + php4.0.3 + postgreSQL7.0.3 という環境で
> Webアプリケーションをつくっております。
>
> 1500件程度のデータ(1レコードあたり1〜2kbyteくらい)が
> DB上にあって、まともにselectで出力すると
> 当然ブラウザ上では1500件全部ばぁ〜っと並んでしまいます。
>
> 50件くらいずつ表示して、「次の50件へ」「前の50件へ」みたいに
> リンクをはるのがスマートだと思うのですが、
>
> はて?これをやるにはselectの実行結果を複数の画面で
> 共有しなければならないのか?
> 例えば
> $sql = "select data1,dat2,data3,data4 from test_table"
> $result = pg_exec($dbconnection,$sql);
> と書いて、この$resultを複数の画面で
> 共有する?(・・・できないと思うが?)