2016-11-09 41 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