2016-12-06 39 views
0

我想在三個字段上搜索:id,name和address。我希望我的搜索有點聰明。在CONCAT中添加通配符在mysql中

用戶表

id   |  firstname  |  lastname  |  address 
N29-0001 |  John   |  Doe   |  California 
N29-0002 |  Jonathan  |  Morson  |  Miami 

我的查詢到目前爲止

select subscriberid, CONCAT(firstname," ",lastname) as fullname, address, city from subscriber where id like "%N29 Joh%" or CONCAT(firstname," ",lastname) like "%N29 Joh%" or address like "%N29 Joh%" or city like "%N29 Joh%" 

我想我的查詢搜索,如果我輸入N29荷蘭Joh,它將搜索李四。

+0

我認爲你應該調查全文索引。 –

回答

1

您可能需要全文索引。但是,如果你想匹配任何單詞而不關心性能,你可以使用正則表達式:

select subscriberid, CONCAT(firstname, ' ', lastname) as fullname, 
     address, city 
from subscriber 
where subscriberid regexp 'N29|Joh' or 
     concat(firstname, ' ', lastname) like 'N29|Joh' or 
     address like 'N29|Joh' or 
     city like 'N29|Joh'; 
+0

我試過全文索引,但它有一個錯誤,這是我的查詢:SELECT * FROM subscriber WHERE MATCH(id,firstname,lastname,address) 反對('N29'在自然語言模式下);該錯誤是無法找到匹配列列表的FULLTEXT索引。 –

+0

我的桌子上應該有FULLTEXT字段,對不對? –

+0

是的。 。 。 http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html。您需要將最小字長設置爲正確的值。 –