KENT-WEB サポートコーナー 過去ログ [ 0369 ]


記事No: 15082
投稿日: 2016/08/16(Tue) 20:44:08
タイトルquick DBのソートを一部止めたい
ID情報: carex
投稿者: carex
URLhttp://2995082d6f34152b.lolipop.jp/quick/quick.cgi?

久々にCGIをいじっています。quickDBで某海外自動車修理番組の放送リストを作ろうと思っています。分類1は放送シーズン(1から12)、分類2は生産国(6カ国+その他)、分類3は扱う頻度の高いメーカー(8社+その他)という構成で、ID1から順に放送データを追加していく形で作成を始め、CSV形式のリストは完成しています。

ところが、実際の放送では扱う車の生産国の順序はランダムであるため、自動ソートで分類2の出番が来ると放送順序を無視して生産国リスト順にソートが行われてしまい、とても見にくいことになります。(写真を追加したりするとソートが実行されてしまいます)

今後放送される分に関しては分類1を追加して行くだけのことなので、ソート機能の恩恵はありません。
よって、並びはID順で固定してソートは止めたいのですが、どこをコメントアウトしたら良いのでしょうか?あるいは他の方法はありますでしょうか? admin.cgiの中にあるsortという行はコメントアウトしてみたのですが、変化はないようでした


記事No: 15083
投稿日: 2016/08/17(Wed) 01:50:41
タイトルRe: quick DBのソートを一部止めたい
ID情報: hirayama
投稿者: hirayama

Quick DBは検索時はdb.cgiに保存されたログを順に調べて検索条件にマッチするものを
ピックアップしているだけでこの時にはソートはされていないようです。
新規データ登録時や編集時に自動的にソートしてデータが保存されているようです。

新規データ登録の場合admin.cgi 294行目の

@data = @data[sort{$tmp1[$a] <=> $tmp1[$b] || $tmp2[$a] <=> $tmp2[$b] || $tmp3[$a] <=> $tmp3[$b]} 0 .. $#tmp1];

修正した時は172行目の

@data = @data[sort{$tmp1[$a] <=> $tmp1[$b] || $tmp2[$a] <=> $tmp2[$b] || $tmp3[$a] <=> $tmp3[$b]} 0 .. $#tmp1];

でソートされているようです。この行を両方コメントアウトすればソートされなくなると思います。
294行目だけコメントアウトだと、新規登録時はソートされないけど、どれかデータを修正すると全部ソートされてしまうことになります。
それと、この修正を行っても、すでに登録されてソートされている分はそのままということになります。

ソートの処理は、sort{$tmp1[$a] <=> $tmp1[$b] 部分がカテゴリー1の項目でのソート
$tmp2[$a] <=> $tmp2[$b] 部分がカテゴリー2の項目でのソートとなっているようなので、
たとえば、カテゴリー2でのソートだけしたくない場合は
@data = @data[sort{$tmp1[$a] <=> $tmp1[$b] || $tmp3[$a] <=> $tmp3[$b]} 0 .. $#tmp1];
のように修正すればいいのかもしれません。


記事No: 15084
投稿日: 2016/08/17(Wed) 12:58:18
タイトルRe^2: quick DBのソートを一部止めたい
ID情報: carex
投稿者: carex
URLhttp://2995082d6f34152b.lolipop.jp/quick/quick.cgi?

早速のご回答、ありがとうございます!
要領を得ない私の説明を解読頂いた上、完璧な解決策をご呈示頂きました。
sortが2行あるところ、上の方に気がつかずにコメントアウトしなかったというお恥ずかしいミスをしていました。
おかげさまでイメージ通りの挙動になりました。

本当にありがとうございました!


[検索ページ] [掲示板]