2011-08-21 3 views
0

내 웹 사이트에 대한 검색 쿼리 종류를 만들려고하고 있는데 '% 문자열 %'을 사용하여 비슷한 결과를 얻을 수 있다는 것을 알고 있습니다. 찾으려는 기사/문자열의 단어 순서대로 입력해야합니다.여러 MYSQL 요청에 의한 검색 및 정렬

예를 들어, "One Three Two"를 입력하면 "One Three Two"주문이 문자열의 어느 위치 에나있을 수 있으며 ... "One One

  1. 폭발()을 두 세 "등

    그래서 내가 솔루션 생각하지만 실제로 솔루션을 해결하는 방법을 생각하지 않은 ...이 내 생각 업 절차 문자열을 모두 입력하십시오.
  2. mysql은 % like like를 사용하여 하나 하나의 단어를 하나씩 쿼리합니다. %
  3. 단어가 모두있는 기사가 있으면 가장 먼저 표시되므로 같은 기사의 대부분 항목별로 정렬됩니다.

그게 전부 야! 그래서 PHP를 사용하여 달성 할 수 있는지 궁금합니다. 아니면 펄이나 다른 것에 다시 가야합니까?

답변

0

예. MySQL의 진정한 표현은 1입니다. 그래서 그것들을 함께 더하고 순서대로 추가하십시오.

mysql> select ('ABC' LIKE '%B%') + ('ABC' LIKE '%C%'); 
+-----------------------------------------+ 
| ('ABC' LIKE '%B%') + ('ABC' LIKE '%C%') | 
+-----------------------------------------+ 
|          2 | 
+-----------------------------------------+ 
1 row in set (0.02 sec) 

그리고 단지 일치하는 기사를 얻을 수 있도록 WHERE 절에 OR를 사용합니다.

SELECT ... 
    WHERE 'ABC' LIKE '%B%' OR 'ABC' LIKE '%C%' 
0

전체 텍스트 검색을 고려할 수도 있습니다. 설치하는 것이 훨씬 더 어렵지만 검색을 검색 엔진처럼 보이게 할 수 있습니다. 관련 키워드를 가진 추가 결과를 찾는 데 매우 유용 할 수 있습니다. 또한, 내부적으로, 당신은 단지 사용자가 제공 무엇을 전달 (모두 함께 세 단어를) 문구의 폭발 핸들해야

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

0

그것은 다양한 검색의 연합 등이있는 쿼리를 만들고, 당신의 3 개 단어를 단어의 부분이 아니라 검색되는 것을

select 1 as levl, text from table where text like '%w1%' or text like '%w2%' or text like '%w3%' 
union 
select 2 as levl, text from table where text like '%w1%' or text like '%w2%' 
union 
select 2 as levl, text from table where text like '%w2%' or text like '%w3%' 
union 
select 2 as levl, text from table where text like '%w1%' or text like '%w3%' 
union 
select 3 as levl, text from table where text like '%w1%' 
union 
select 3 as levl, text from table where text like '%w2%' 
union 
select 3 as levl, text from table where text like '%w3%' 
order by levl 

참고

예 : 그 앞에 가장 일치를 얻기 위해 아이디어를 다음과 같습니다. 전체 단어 만 원하면 결과의 각 행을 PHP에서 구문 분석하여 잘못된 단어를 제거하십시오. SQL은 주 선택기가 될 것이고, 당신은 정유소를 수행 할 것입니다.

관련 문제