2016-10-14 13 views
1

それはフィールドがこのようなものがあり、MySQLのフィールドを検索することができます場合、私は疑問に思って:MySQLの検索

test - hello 

をしかし、あなたは、ユーザー

test: hello 
から文字列を持っています

明らかに、PHP側でそのような特殊文字列を取り除くのは簡単ですが、MySQL行を検索して特殊文字を無視することは可能ですか?

+4

はフルテキストインデックスを基本的に使用します。それ以外の場合は、「無視する」ことはできません。それはあなたのコードがmysqlではなく、何かをしなければならないことです。 –

答えて

0

あなたが見つけると、そのようなすべての特殊文字やユーザも入力欄からスペースを交換する場合、それは可能かもしれない、あなたが使用してなどの特殊文字、空白を、「無視」でソートすることができます すなわち

select * from tablename where replace(replace(columnname,' ',''),':',''),'-','')=replace(replace([USER INPUT],' ',''),':',''),'-',''); 
+0

うーん、それはかなり斬新なアプローチだ、それは行く、感謝を与えるかもしれない! – NaughtySquid

0

SOUNDEX()機能:

SELECT ... 
FROM MyTable 
WHERE SOUNDEX(somefield) = SOUNDEX('test: hello'); 

mysql> select soundex('test - hello'), soundex('test: hello'); 
+-------------------------+------------------------+ 
| soundex('test - hello') | soundex('test: hello') | 
+-------------------------+------------------------+ 
| T234     | T234     | 
+-------------------------+------------------------+ 

ですから、このようなあなたのデータを検索することができます

これは索引付け不可能なので、テーブルスキャンを強制されます。 MySQL 5.7を使用する場合は、soundex式の仮想列を追加し、その仮想列にインデックスを付けることができます。それはパフォーマンスを大きく助けます。