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


カレッヂ
カレッヂ


質問者 まつ  投稿日 2004/5/4(火) 00:15:30
過去の質問を参考にして、ソートされた結果が表示されるようにしたのですが、
少し変なソートになって、うまくいきません。
オリジナルの110行目あたりに、

#ソート
	@tmp=map{(split(/\,/,$_))[2]}@NEW;
	@NEW=@NEW[sort{$tmp[$a] cmp $tmp[$b]}0..$#tmp];

という文を加えています。
ページごとでは確かに、項目[2]はソートされていますが、
全体としてはソートされていないのです。たとえば、1ページあたりのレコードが
5と設定されており、データファイルが
,,3,
,,7,
,,6,
,,4,
,,5,
,,2,
,,9,
,,1,
,,8,
となっていたとき、ソートされると
「1ページ目」
,,3,
,,4,
,,5,
,,6,
,,7,
「2ページ目」
,,1,
,,2,
,,8,
,,9,
と表示されるのです。
つまり、表示数ごとにソートされて、ページを超えて前に並ぶことがないのです。
文法的なことはほとんど知らず、勉強不足で申し訳ありませんが、
どうかご教授ください。よろしくお願いします。

プロバイダ参照:http://www.sakura.ad.jp/support/web/manual/
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:秀丸
FTPソフト:RootFTP
サーバ移転:していない
改造:していない 改造前正常動作
CGI習熟度:middle

回答者 sim  [削除]  投稿日 2004/5/6(木) 21:38:36
次のページに行くときは表示する番号を送信してあげればよいのではないでしょうか?

0〜4まで表示したのであれば、次は5ですよ。ってのを一緒に送信してあげればいいんじゃないかと思います。

$表示させる番号 = $ENV{'QUERY_STRING'};
if(!$表示させる番号){$表示させる番号 = 0;}

@ソートされた配列 = sort{ソートさせる。} @ソート前の配列;
for($i = 表示させる番号;$i < 表示させる番号+5;$i++){
$data = $ソートされた配列[$i];
print $data;
}

mapをほとんど使ったことがないので、こんなのですが。。

返信(回答)する

 


Web裏技