CGI-BBS > データベース > 簡易データベース > 簡易データベースの改造で検索結果をソートできない。


カレッヂ
カレッヂ


質問者 ロデオ  投稿日 2004/5/11(火) 12:21:48
過去にも同じような質問がありましたが、どうしてもうまくいきません。
簡易データベースで各ページ毎にソートをするのではなく、検索結果全体をソート
したいのですが...。

http://www.rescue.ne.jp/CGI-BBS/database/database/20040504001530.shtml

でのsim様の回答のように試してみましたが、どこに入れたらよいか分かりません。

こういう場合、検索結果全体を呼び出してソートをしてページ毎に分けるというような
やり方でよいのでしょうか?

素人で申し訳ございませんが、宜しくお願いします。

プロバイダ参照:
サーバのOS:(未選択)
パソコンのOS:WinNT系
エディタ:
FTPソフト:
サーバ移転:していない
改造:している 改造前正常動作
CGI習熟度:middle

回答者 momo  [削除]  投稿日 2004/5/13(木) 22:37:07
初心者なのでたいしたことが言えませんが
過去のログのとおりにしても、全体でのソートはできません。
なぜならCGIのプログラム自体に問題があるからです。
このCGIでは

1.表示データを頭から検索する
2.該当結果が$pageに達すると、ストップ
3.HTMLにて結果を表示
4.「次へ」を押すと再び次の番号から「検索」

という流れなので、
まず、根本から直さないといけません。
ワタシも「何件HITしたか」を表示させたくて、改造しようかな・・・
と考えている最中ですので。。。
回答者 ともたん  [削除]  投稿日 2004/6/11(金) 22:50:20
以前、sim様にアドバイスをもらった者です。全体のソートは可能です。
しかも結構簡単です。
ただし、サーバの負荷が大きいようです。
search.cgiの62行目付近に

if (!open(IN,"$file")) { &error(
@BASE = <IN>;
close(IN);

という部分があります。
ここで、@BASEに登録データの全てがはいります。ここでソートしましょう。

if (!open(IN,"$file")) { &error(
@abc = <IN>;
@BASE = sort { (split(/,/,$b))[配列番号] <=> (split(/,/,$a))[配列番号] or (split(/,/,$b))[配列番号] <=> (split(/,/,$a))[配列番号] } @abc;
close(IN);

のように書き換えるだけです。
登録データが多くなるとサーバの負荷がかなり大きくなるようですので注意してください。

返信(回答)する

 


Web裏技