CGI-BBS > データベース > 簡易データベース > 部分一致でヒットし、かつ複数要素検索できるようにしたい。


カレッヂ
カレッヂ


質問者 パグ  投稿日 12/9(月) 15:58:40
以前あったご質問に
3/15(木)03:04:47 複数要素での検索は出来ますか? 
8/30(木)11:18:04 完全な一致でなくてもヒット - AAaa、単語の一部 
というのがありましたが、各々お答えされている通りにやるとできたのですが、
複数要素で検索して、その結果その要素のどれかが部分一致であればヒットするといった、
上の二つのことを同時にはできないかと考えております。

どなたかお分かりになる方がいらっしゃればよろしくお願いいたします。

プロバイダ参照:http://homepage.nifty.com/
サーバのOS:不明
パソコンのOS:Win95系
エディタ:メモ帳
FTPソフト:DreamWeaver
サーバ移転:していない
改造:している 改造前正常動作
CGI習熟度:middle

回答者 しあわせのツボ  [削除]  投稿日 12/9(月) 18:41:16
複数検索の改造で、自動的に部分一致になると思いますが、そうなりませんか?
質問者 パグ  [削除]  投稿日 12/9(月) 21:21:04
返信ありがとうございます。

複数検索の改造をすると、複数検索はできるのですが、部分一致にはなりません。
同じように改造していると思うのですが。
スクリプトを記載してみます。よろしくお願いいたします。

●入力フォーム
          <select name="PREF" size="4" multiple>
            <option value="all" selected>指定しない</option>
            <option value="北海道">北海道</option>
            <option value="青森県">青森県</option>
        ・
        ・
        ・
          </select>


●search.cgi
#■入力

$FORM{'PREF'}='';

if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }

if ($buffer eq "") { &error('エラー','使い方が間違っています.'); }

@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {

	($name,$value) = split(/=/, $pair);
	$name2 = $name;
	$value2 = $value;

	if($name eq 'PREF'){
    $FORM2{$name} .= $value;
}
else{    $FORM2{$name} = $value;
}

	$value =~ tr/+/ /;
	$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	&jcode'convert(*value,'euc');

	$value =~ s/</&lt;/g;
	$value =~ s/>/&gt;/g;
	$value =~ s/\n//g;
	$value =~ s/\r//g;
	$value =~ s/\t//g;
	$value =~ s/\,//g;

	#フォーム変数へ
	
if($name eq 'PREF'){
    $FORM{$name} .= $value;
}
else{    $FORM{$name} = $value;
}

}

#■検索処理

if (!open(IN,"$file")) { &error('データベース読取エラー','復旧をお待ちください.'); }
@BASE = <IN>;
close(IN);

if ($FORM{'FF'} eq '') { $FF = 0; } else { $FF = $FORM{'FF'}; }
$TO = $FF + $page - 1;
if ($TO > $#BASE) { $TO = $#BASE; }
$hit = 0;
$next_num = '';

foreach $num ($FF .. $#BASE) {

	$data = $data2 = $BASE[$num];
	&jcode'convert(*data,'euc');
	($DATE,$PREF,$NAME,$AGE) = split(/\,/,$data);

	# 都道府県(一致)

	if ($FORM{'PREF'} ne 'all') {

		if ($FORM{'PREF'} =~ $PREF) { ; } else { next; }

	}

返信(回答)する


Web裏技