2016-11-09 14 views
0

innodb全文検索で@をエスケープする方法はありますか?私はとemailの列を持っています。Innodbのエスケープ@記号全文検索

私が必要とするのは、@シンボルを含むすべての値を返すことです。 MySQLのドキュメントが言うよう

SELECT id 
FROM  table 
WHERE (MATCH (table.email) AGAINST ('[email protected]+' IN BOOLEAN MODE)) 
AND  id IS NOT NULL 
GROUP BY id 

は、しかし、これは構文エラーを与える@私は彼らやPHPから他の方法を逃れることができるクエリhttp://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

で使用することはできませんか?

+0

フルテキスト検索は、単語の先頭を探すときに便利です(列に複数の単語が含まれていても、すべての単語の順序付きリストであるため)。メールアドレスが1つしかないコラムがある場合、フルテキスト検索はあなたが探しているものではありません(いくつかの理由で)。代わりに、 '%@% 'のようなtable.emailを使用してください。 – Solarflare

+0

これは電子メール列の例に過ぎません。また、' @ '値を持つ' operator'という列もあります。私は何とかFTSを使ってそれを処理できますか? – jitendrapurohit

+0

私はそれを得ることができません:フィールドに '@'しかない場合、なぜ全文検索を使用したいのですか?適切でないかもしれない解決策を強制しようとするのではなく、あなたの実際の質問を記述できますか? – Shadow

答えて

1
MATCH(email) AGAINST ('+test +email +com' IN BOOLEAN MODE) 
AND email LIKE '[email protected]` 

これは最初FULLTEXT検索を行うと、速いそれを行います。一致した行ごとに、余分なチェックが行われます。

注意:innodb_ft_min_token_sizeはおそらく3ですので、[email protected]のようなものは+abを含まないようにしてください。極端な場合、[email protected]MATCHは避けてください。すべてのトーキーが短すぎるからです。

つまり、MATCH...AGAINSTを構築するにはクライアントコードが必要です。