2012-11-22 5 views
1

나는 제목, 저자 및 텍스트의 세 가지 필드에 키워드 검색을 만들려고합니다. 내가 관련성에 따라 정렬되기를 바랄 테니, 어느 분야에서나 일치하는 부분을 한 점 부여합니다. 또한 각 행에 스토리 태그를 저장하는 태그라는 테이블이 있습니다. 태그에 일치하는 항목이 있으면 해당 태그가 사용 된 횟수를 관련성에 추가합니다. 사용자가 검색을 입력하면 일련의 키워드를 입력 할 수 있습니다. 문자열을 폭발시키고 for 루프를 사용하여 아래의 select 문에 각 키워드에 대한 코드를 추가하려고 생각했습니다. 이 작업을 수행하는 더 좋은 방법이 있는지 궁금 해서요.MySQL의 PHP 키워드 검색

select text, ((case when S.sid in (select sid from tags where tahname like 'db') 
      then (select uses from tags T where S.sid = T.sid and tagname like 'db') + 
       (case when title like '%db%' then 1 else 0 end) + 
       (case when author like '%db%' then 1 else 0 end) + 
       (case when text like '%db%' then 1 else 0 end)) as relevance 

from stories S 
order by relevance desc 

감사합니다.

답변

2

예, 키워드를 할 수있는 더 나은 방법이 개발 된 것을 사용

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

또는 사용할 수 있습니다 수색.

사용중인 방법은 테이블 스캔을 강제 실행합니다. 이는 테이블의 모든 행을 읽어야 함을 의미합니다. 결국 테이블에 저장할 데이터의 양에 따라 전문화 된 전체 텍스트 인덱싱 방법을 사용할 때보 다 수백 또는 수천 배나 느리게 실행될 수 있습니다.

다른 솔루션을 비교 한 내 프레젠테이션 Full Text Search Throwdown을 확인하십시오. ,

+0

안녕 응답 주셔서 감사합니다 : 포함입니다. 나는 mysql이 처음이기 때문에 MyISAM 테이블과 InnoDB 테이블 사이의 차이점을 잘 모르지만 InnoDB 테이블을 사용하고있다. 필자는 (mysql 5.6에서) InnoDB 테이블에서 아직 사용할 수 없다고 말할 때 그것을 가정한다. – user1832628

+0

맞아요, MySQL의 다음 릴리스를 위해 개발중인 새로운 기능입니다. –