2011-03-17 66 views
3

假設我有與列的表:結合兩列,一個在MySQL

`id`,`firstname`,`lastname` 

有了這樣一些行:

'1','bob','marley' 
'2','mary','jane' 

,我有一個搜索查詢是這樣的(其中「鮑勃·馬利「是我的檢索詞):

select * where 
(`firstname` like 'bob marley%') 
or 
(`lastname` like 'bob marley%') 

但是,如果我搜索用戶可以在本只得到一擊‘鮑勃’或‘馬利’,而不是」鮑勃·馬rley' 如何連接兩列以匹配搜索詞?

編輯: 該表格將有數十萬行,因此性能至關重要。 concat()是否足夠高效,可以在帶有延遲擊鍵調用的ajax搜索中工作?或者我應該重新設計我的表格還是添加一個全文搜索欄?

回答

10

使用MySQL的CONCAT功能:

SELECT * FROM tablename WHERE CONCAT(firstname, ' ', lastname) LIKE 'bob marley%' 
4

這會破壞你的查詢性能,但可以使用concat_ws並將其與之間的空間結合起來。

select * 
from tbl 
where concat_ws(' ', firstname, lastname) like '%bob marley%' 

請注意,我有切換right-sided-%double-sided-%。這是必要的,否則當搜索只使用marley時,'marley%'不匹配。