2016-11-09 50 views
0

反正有innodb全文搜索中的@。我有tableemail列。Innodb中的Escape @符号全文搜索

我需要的是返回所有包含@符号的值。

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