CGI-BBS > データベース > 簡易データベース > 簡易データベースの改造で検索結果の昇順を自由に変更したい。


カレッヂ
カレッヂ


質問者 ともたん  投稿日 2004/4/21(水) 01:03:31
簡易データベースをリンク集として改造したいのですが、
検索結果で表示されるデータにアクセス数や、お勧めサイト
などの条件をつけて、条件に合致したものを優先的に上位に
表示できるようにしたいのです。
よろしくお願いします。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:perlを始めよう
FTPソフト:
サーバ移転:していない
改造:している 改造前正常動作
CGI習熟度:middle

回答者 sim  [削除]  投稿日 2004/4/21(水) 13:48:14
検索結果は配列に入れられているのかな?と思います。

foreach(<IN>){
if(検索マッチ){push(@array,$_);}
}
こんな感じですが。

@arrayをソートします。

sortという関数があるので、それを利用します。
多分カンマ区切りだと思うので下記のような感じで。

@sorts = sort { (split(/,/,$a))[配列番号] cmp (split(/,/,$b))[配列番号] } @array;

1.数値での昇順は cmp の部分を <=> に変更します。
2.降順にしたい場合は $a と $b を入れ替えます。
3.検索したい項目は [配列番号] で設定します。 
  [例]$array[0]="'名前','年齢','住所'";だった場合
  名前なら [0] 年齢なら [1] 住所なら[2]です。
4.複数検索したい場合は or などで追加。
  [例]年齢の低い順で、年齢が同じ場合は名前順に並べる
  @sorts = sort { (split(/,/,$a))[1] <=> (split(/,/,$b))[1] or (split(/,/,$b))[0] cmp (split(/,/,$a))[0] } @array;

こんな感じでいけるかと思います。
質問者 ともたん  [削除]  投稿日 2004/4/21(水) 19:36:18
sim様、お返事ありがとうございます。
昨日も質問に答えていただき感謝しております。
sim様のおっしゃられた通りにやってみたのですが、
いまいちうまくいきません。
簡易データベースの検索結果のところは
何も改造していない状態で
foreach $data (@NEW) {
($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data);
となっております。
この下にforeachでループされた検索結果が表示されると
思うのですが、sort関数をどのあたりに入れたらうまく
いくのかわからないのです。
初歩的な質問で申し訳ありません。
回答者 sim  [削除]  投稿日 2004/4/21(水) 19:54:43
@sorts = sort { (split(/,/,$b))[1] cmp (split(/,/,$a))[1] } @NEW;
foreach $data (@sorts) {
($d,$DATE,$NAME,$EMAIL,$SEX,$AGE,$HANDLE,$PREF,$REM) = split(/\,/,$data);

こんなので動くかと思います。
質問者 ともたん  [削除]  投稿日 2004/4/21(水) 20:22:03
私の意図していたところが、完璧にできました。
sim様ありがとうございます。
foreachの前に入れるというのはわからなかったです。
なんとお礼を申し上げてよいかわかりません。
また何かありましたら、質問しますので、
よろしくお願いします。

このページは終了したので返信(回答)は書きこめません
 


Web裏技