2011-08-15 20 views
2

現在、一般的な単語(a、able、a​​boutな​​ど)の配列をフィルタリングして送信しないようにするナレッジベースの検索機能がありますクエリ内にあります。残念ながら、誰かがそれらの一般的な単語のうちの1つだけを検索した場合、何も返されません(フィルタリングされていないとクエリには「申し訳ありませんが見つかりませんでした」というコードがあります)。MySQLデータベースの検索で「申し訳ありません、結果が見つかりません」

フィルタされた単語が検索されても結果が見つからない場合は、同じことをする必要がありますが、それについては最善の方法はありません。以下はフィルタリングされたコードです。

//Defines common words to be striped. 
$commonWords = array('a','able', etc) 
//Strips common words from being included as a search term 
$searchterm = preg_replace("/\b(".implode('|',$commonWords).")\b/i",'',$searchterm); 

if(mysql_num_rows($result) == 0) { 
echo "<img src=\"images/oops.png\"> Sorry, no results found. <br /><br /><div id=\"custformSubmit\">Chat Now</div>"; 
//Records missing search terms in a database 
mysql_query("INSERT INTO quer (IP, Query) VALUES ('$ip','$search')") or die(mysql_error());; 

は、私は何が実際に提出する上で検索されていないので(はmysql_num_rows($結果)== 0)が動作しない場合ことを理解し、私はそれを修正するための最良の方法のかわかりません。

編集:また、div id 'custformSubmit'は、必要な代理人とチャットするためのチャットウィンドウを表示します。

答えて

0

置換回数が==元のクエリの単語数である場合、preg_replaceの置換カウンタ(documentationを参照)と出力Sorry, no results found.を使用できます。

これを行うより良い方法があるかもしれませんが、それは私が提供されたコードで提案することができます。

1

フィルタリング後に文字列をトリミングし、if(empty($ filteredstring))を確認してから、sqlクエリを実行せずに何も見つからない場合はメッセージを出力してください。

また、複雑なパターンがない場合は、pregよりもstr_replaceを使用する方が簡単です。配列のキーとして共通の単語を設定し、値として置換( '')するとstr_replace(array_keys($ filter)、$ filter、$ string)のようになります

関連する問題