2017-03-09 9 views
0

検索ページでシトロエンを検索したときに結果が得られましたが、黒いロールを検索すると結果が得られません。なぜなら、テーブルにblack'nロールのように書かれているからです。一部のユーザーは、ブラックロールを検索したいかもしれませんが、結果を得ることはありません。どうすれば修正できますか?そしてまた、「& /(のようなV-HRとspeacial文字のような行)。私はmysqlはそれらを無視します。アポストロフィをフルテキスト検索でmysql

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against('citroen')"; 

答えて

0

あなたはすでに、その後(置換される)文字を知っている場合、あなたはMySQLのREPLACEを使用することができます%に置き換えるとLIKE比較を行う機能、例えば:

create table test(value varchar(100)); 
insert into test values ('black''n roll'); 


SELECT value 
FROM test 
WHERE 'blackn roll' LIKE CONCAT('%', REPLACE(value, '''', '%'), '%'); 

あなたの入力文字列と「blacknロール」を交換し、あなたが複数の文字を交換する必要がある場合、ネストされたREPLACEの機能を使用することができ

+0

回答ありがとうございます。それは両方の結果を返していますか?一部のユーザーはブラックロールを検索し、あるユーザーはブラックアンドロールを検索することができます。だから私は同じ結果を得ることができますか? – codeigniter

+0

はい、両方のケースで結果を返します。 –

0

バックスラッシュはMySQLのエスケープ文字です。あなたは次のことを試すことができます...ワードターミネータのために全文索引付けがちょっと変わってきます。

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against ('black\'n roll' IN BOOLEAN MODE);" 

これでうまくいかない場合は、単語を個別に検索してみてください。単語の長さも要因であり、小さな単語(デフォルトでは4文字未満)は索引付けされません。

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against ('black' + 'roll' IN BOOLEAN MODE);" 
関連する問題