私は初心者です。私は数週間先進的な検索のためのコードを検索しようとStackoverflowを検索しました。
最後に自分自身を作成しました。それはかなりうまくいっています。私はそれを使用したいかもしれない他の人のためにここに挙げています。
質問は以下のとおりです。高度な検索mysql perl
*
をデフォルトに選択されていないが、それは働いていない
。 item_categoryは検索に必要な唯一の変数ですか?
サニタイズやハックの注入について心配する必要はありますか?
完全一致は機能していないようです。それは100語を 'FREE'で検索している可能性があり、一致するものは見つかりません。何か案は?
信頼性とスピードの問題に関するご意見はありますか?
$ ANDORは= PARAM( 'アンドールは');#は、作成しOR を検索する場合($ ANDOR EQ ""){$ ANDOR = "AND";}
IF($ item_category){ $ item_category = "$ item_category"; } else {$ item_category = "*"; } $ statement。= "item_category LIKE '$ item_category'";
if($ item_state){ $ statement。= "$ ANDOR item_state LIKE '$ item_state'"; } if($ item_city){ $ statement。= "$ ANDOR item_city LIKE '$ item_city'"; } if($ db_id){ $ statement。= "$ ANDOR db_id = '$ db_id'"; }
$ keywords = param( 'keywords');
($キーワード)であれば { 場合(パラメータ( 'searchmatch')EQ "正確な") { $声明。= "$アンドールITEM_NAME = \" $キーワード\ "OR item_desc = \" $キーワード\ " OR item_desc2 = \ "$キーワード\" ";#他
} {$声明=。" $アンドール"。 私の@keywords =分割(/ /、$キーワード);
foreach my $keyword(@keywords) { $statement .= " item_name LIKE '%$keyword%' OR item_desc LIKE '%$keyword%' OR item_desc2 LIKE '%$keyword%' "; }
}}
$ date_begin = PARAM( 'date_begin')。 if($ date_begin){ $ステートメント。= "$ ANDOR modification_time> '$ date_begin'"; }
if($ user){ $ statement。= "$ ANDOR user LIKE '$ user'"; }
$ price_low = param( 'price_low'); $ price_high = param( 'price_high'); if(($ price_low)& &($ price_high)){ $ステートメント。= "'$ price_low'と '$ price_high'の間の$ ANDOR item_price"; } elsif(($ price_low)& &($ price_high eq "")){ $ statement。= "$ ANDOR item_price BETWEEN '$ price_low' AND *"; } elsif($ price_high)& &($ price_low eq "")){ $ statement。= "$ ANDOR item_price BETWEEN '0' AND '$ price_high'"; } else { $ statement。= "";
}
私の$ sthは= $ dbh->((QQを$声明)WHEREテーブルSELECT * FROM)を調製 または$ DBI :: errstrは死にます。 $ sth-> execute(); while((my(@rows))= $ sth-> fetchrow_array) { $ total_row_count = $ sth-> rows; $ database_rows = join( "\ |"、@rows); push(@ database_rows、$ database_rows);
}
Re(3)、あなたは正しく疑いがあります。 'AND'は' OR'より優先順位が高いので、 'exact'検索句には括弧が必要です。 – ikegami
ありがとうございます。変更されたコードは素晴らしい作品です。それを投稿する方法を理解できません... –