2016-11-09 6 views
0

Есть ли все равно, чтобы избежать @ в intodb полнотекстового поиска. У меня есть table с колонкой email.Escape @ symbol in Innodb Полнотекстовый поиск

Мне нужно вернуть все значения, содержащие символ @.

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

Но это дает ошибку синтаксиса как говорит MySQL документ @ не может быть использован в запросе http://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

Могу ли я избежать их или любой другой путь из PHP?

+0

Полнотекстовый поиск полезен, когда вы ищете начало слов (потому что это упорядоченный список всех слов, даже если столбец содержит несколько слов). Если у вас есть столбец с одним адресом электронной почты, полнотекстовый поиск не является тем, что вы ищете (по нескольким причинам). Вместо этого используйте 'where table.email like '% @%'' – 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. В крайнем случае, избегайте MATCH для [email protected], так как все токи слишком короткие.

То есть, вам нужен код клиента для построения MATCH...AGAINST.