ミワ
[E-Mail]
2000/03/09(木) 13:04:10
CGIでデータベースを作ろうと思い、いろいろサンプルを探していて
レスキューさんのところの“簡易データベース”というものを見つけました。
でも、このサンプルには“前の?件を表示”というのがありません。
そもそも、いろんなサーチエンジンにある同様のボタンはどのようなアルゴリズム?で
動いているんでしょうか?(2ページ分検索してそれぞれをわたしてるの??)
お分かりになる方、ご教授お願いします。
瀬良
[E-Mail]
2000/03/09(木) 14:41:48
データベース内のデータに index として利用する要素があるとします。
記事でいうところの「記事番号」とかです。
それを用い、「記事番号○番からX件を表示」とかする方法があります。
たとえば 1 HTML あたり 15 件づつ表示しているとしましょう。
現在 91 番から 105 番を見ているとします。
番号の若い 15件を表示→86番から15件
番号の多い 15件を表示→106番から15件
なんていう風にできるはずです。
これはあくまで方法の 1 つなので、
各検索エンジンがどのような仕組みでか・・は知りません。
びーだま
[E-Mail]
2000/03/09(木) 15:08:44
レスキューさんの“簡易データベース”をつかったことはないんですが、
いま見にいって、ソースだけのぞかせてもらいました。
実際に動かしていないんですが、ちょっと見てわかった範囲でできそうな
即席対応案です。
print "<h3>↓<a href=\"search.cgi?$buf&FF=$next_num\">次の$page件</a></h3>\n";
の周辺ににちょっと工夫をしてあげるだけで、なんとなくうまく行きそう
です。実際にうまくゆくかどうかは、動かしてみないとわからないですが、
動かすのは面倒くさいので、(^^;
動作確認もしていないので、誤動作したら、ごめんなさい。
変更をするまえに、オリジナルを取っておいてね。
$prev_num = $next_num - ($page * 2);
if ($prev_num < 0) {
$prev_page = $page + $prev_num;
$prev_num = 0;
}
if ($prev_page > 0) {
print "↑<a href=\"search.cgi?$buf&FF=$prev_num\">前の$prev_page件</a><BR>\n";
}
print "↓<a href=\"search.cgi?$buf&FF=$next_num\">次の$page件</a>\n";
こんな感じで、どうでしょうね?
考え方は search.cgi に対してスタート点 FF を与えてやれば、あと
はプロクラムが対応してくれるみたいでしたので、スタート点の定義
をどう与えてやるかだけで、あとはプログラム任せでどうにかなるん
だろうな。と思いました。
というわけで、
前の○○件のスタート点は、次のページのスタート点から、次に表示
される件数と、いま表示されている件数を足したもの、つまり、プロ
グラム内では、$page を2つ掛けた数字を次のページとして既にわかっ
ているスタート点から、引いたところになります。
つぎに、前のスタート点がマイナスになってしまうと良くなさそうなの
で、その場合は、0 にしてあげなくてはならないのですが、この場合は、
前にあと何件あるかということも変更しなくれはなりませんから、これ
をあらかじめわかっている表示するべき、件数から、計算上のスタート
点を引きます。すなわち、マイナスになる場合にこれを考えるわけです
から、実際には、マイナス値を足します。要するに実質引き算です。
で、あとは親切に、前の0件なんてのは変ですから、1件もないなら
「前の○○件」は表示する必要がありません。
ミワ
[E-Mail]
2000/03/09(木) 15:39:31
びーだまさん、ご教授ありがとうございます。
レスキューさんのサンプルの$FFは、“あ”を含む項目を15件づつ表示する場合、
データ1から順番に“あ”を含む項目を検索して、ヒットした数が15件になった時の
データ番号(データ$FF)というような値だと思われます。($pageは、表示件数)
#こんな感じ 1、2、・・・・・・・・・$FF(15とは限らない)
なので、単純に$pageを引いた値をわたしても、検索条件が15件に満たない場合も
でてきますよね??
う~む、ムズカシイ。