カレッヂ |
質問者 ともたん
投稿日 2004/4/21(水) 01:03:31
簡易データベースをリンク集として改造したいのですが、 検索結果で表示されるデータにアクセス数や、お勧めサイト などの条件をつけて、条件に合致したものを優先的に上位に 表示できるようにしたいのです。 よろしくお願いします。
プロバイダ参照: |
回答者 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裏技 |