2011-03-17 5 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()입니까? 또는 테이블을 재 설계하거나 검색을 위해 전체 텍스트 열을 추가해야합니까?

답변

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 %'는 일치하지 않습니다.

관련 문제