シナリオ:次のクエリを使用して、特定のカテゴリのProductNameとDescriptionの2つの列でMySqlテーブルを検索しています。
$query = "SELECT * FROM Products WHERE MATCH(ProductName,Description) AGAINST ('+$terms[0]* +$terms[1]* +$terms[2]* +$terms[3]* +$terms[4]*' IN BOOLEAN MODE) AND category_description='".$search_dept."' OR MATCH(ProductName,Description) AGAINST ('+$terms[0]* +$terms[1]* +$terms[2]* +$terms[3]* +$terms[4]*' IN BOOLEAN MODE) AND category2='".$search_dept."' ORDER BY $orderby LIMIT $offset, $rowsPerPage";
検索条件$terms[x]は、フォームのテキスト入力フィールドからのものであり、次を使用してフォーマットされています。
$slash_term = addslashes($_POST['term']);
$var = @$slash_term;
$trimmed = trim($var);
$terms = explode(' ',$trimmed);
ストップワードを使用するまでルーチンはうまく機能し、その後、明らかにクエリは強制終了されます。
共有サーバーを使用していますが、ストップワードチェックを無効にできません。したがって、私が調査してきたことから、この問題を回避するためにLIKEと%ワイルドカードを使用できる可能性があります。
したがって、上記のクエリをLIKEクエリに変換するにはどうすればよいでしょうか。次のようなものになると思いますが、機能していません。
$query = "select * from Products where category_description='".$search_dept."' AND Description like \"%$trimmed%\" OR category_description='".$search_dept."' AND ProductName like \"%$trimmed%\" ORDER BY $orderby LIMIT $offset, $rowsPerPage";
そして、%$ triggered%を使用するだけで、ワイルドカード化された検索フレーズから個々の単語を取得できますか?それとも、それは私がそれについて行くべき方法でさえありますか?ほとんどの場合、検索には複数の単語が含まれます。
最初のクエリはほぼ完璧に機能するように見えるので、ユーザーの入力でストップワードをチェックするサブルーチンを追加し、検索する前にフレーズからそれらを削除するだけの価値はありますか?