2014-01-23 2 views
0
SELECT * FROM store WHERE 
concat_ws(name, type, location) LIKE :search1 OR :search2 OR :search3 

for($n=0; $n<$count; $n++) 
    $query->bindValue(':search'.$n, '%'.$search[$n].'%', PDO::PARAM_STR);} 
} 

검색어가 있습니다. 사용자 입력을 예 : array ('i', 'love', 'apple');Mysql LIKE 또는 가장 가까운 일치로

내 질문에 가장 가깝게 주문 하시겠습니까?

은 위치 열에서 뉴욕 많은 내용을 반환 할 사용자 유형 뉴욕 사과 그래서 만약이, 3 열을 검색하고, 많은 내용이 사과와는 아무 상관없는

답변

4

이 작업을 수행하려면, 당신에게 전체 텍스트 검색이 필요합니다 (http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html). LIKE보다 다소 복잡하지만 확실히 더 빠르고 똑똑합니다.

당신은 ("난"단어로 취급되지 않기 때문에 기본 값은 쿼리 어쨌든 작동하지 않을 것입니다) 전체 텍스트 검색을하지 않고이 작업을 수행 할 수
+0

내 데이터베이스에 많은 중국어가 있기 때문에 전 텍스트 검색을 시도했으며 일부 테스트를 수행 한 결과 일부 중국어 내용을 검색하는 데 문제가 있음 – Ben

+0

해당 언어로 된 단어 나 다른 색인어를 추가 할 수 있으려면 FULLTEXT 인덱스의 경우 "" "와 같은 임의의 구분 기호로 구분되도록 사전 처리해야합니다. (http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html) – Agares

+0

당신이 의미하는 바는 무엇입니까? – Ben

2

: 바이

order by ((concat_ws(name, type, location) LIKE :search1) + 
      (concat_ws(name, type, location) LIKE :search2) + 
      (concat_ws(name, type, location) LIKE :search3) 
     ) desc 

이 주문 대부분은 가장 적은 것에 매치한다. where 절도 세 가지 다른 like 절과 함께 동일한 형식을 따라야합니다.

관련 문제