假设我有一个包含列的表:
`id`,`firstname`,`lastname`
有些行如:
'1','bob','marley'
'2','mary','jane'
我有一个像这样的搜索查询(其中'bob marley'是我的搜索词):
select * where
(`firstname` like 'bob marley%')
or
(`lastname` like 'bob marley%')
但是,如果我搜索“bob”或“marley”,而不是'bob marley',这只会受到影响 如何连接两列以匹配搜索词?
编辑: 该表将有数十万行,因此性能至关重要。 concat()是否足够高效,可以在延迟按键调用的ajax搜索中工作?或者我应该重新设计我的表格或添加全文列进行搜索?
答案 0 :(得分:10)
使用MySQL的CONCAT
功能:
SELECT * FROM tablename WHERE CONCAT(firstname, ' ', lastname) LIKE 'bob marley%'
答案 1 :(得分:4)
这会破坏您的查询效果,但您可以使用concat_ws将它们与中间的空格合并。
select *
from tbl
where concat_ws(' ', firstname, lastname) like '%bob marley%'
请注意,我已{strong>切换您的right-sided-%
到double-sided-%
。当使用marley搜索时,这是必要的,'marley%'将不匹配。