2012-02-26 6 views
0

내 웹 사이트에서 내 뉴스 섹션에 대해보다 정확한 검색 기능을 구축하려고합니다. 나는 콘텐츠 영역에서 LIKE를 사용하지만, 내 문제는 "3 단어 검색"으로 쓰여진 데이터베이스에서 "3 개의 검색"을 검색 할 때 어떤 콘텐츠도 반환하지 않는다는 것입니다.보다 정확한 검색 결과를 반환하는 mySQL LIKE/MATCH

MATCH를 사용하도록 권유 받았지만 결과를 반환 할 수 없습니다. 내 쿼리는 여러 테이블에서 다양한 필드를 반환합니다. 내 검색 영역에는 검색 블록이 1 개 이상 있습니다. 필요에 따라 변경할 수 있지만 점수가 낮을지라도 모든 결과를 반환해야합니다.

$sql = "SELECT news.id, news.name, news.date, news_categories.name as catName, news.author, statuses.name as statusName, MATCH(news.name, news.summary, news.content, news.keywords) AGAINST ('".$content."') AS score FROM news, news_categories, statuses WHERE news.name LIKE '%".$name."%' AND MATCH(news.name, news.summary, news.content, news.keywords) AGAINST ('".$content."') AND news_categories.id LIKE '%".$category."%' AND news.status_id LIKE '%".$status."%' AND news.status_id=statuses.id AND news.category_id=news_categories.id"; 

어떤 도움이

답변

0

Fulltext는 내 요구 사항이 항상 값을 얻는 것이기 때문에 여기서는 도움이되지 않았습니다. 나를 위해보다 쉽고 효과적인 방법은 검색어를 포함하는 변수에 str_replace를 사용하고 "%"를 모두 "%"로 바꿔서 단어가 "% 3 % 단어 % 검색 %"가되도록했습니다.

0

당신이 검색하고자하는 분야에 FULLTEXT 인덱스를 만들어야합니다 도움이 될 것입니다 :

여기 내 SQL입니다. 예 :

ALTER TABLE news 
    ADD FULLTEXT(name, summary, content, keywords); 

이제는 MATCH() ... AGAINST 절에 해당 필드를 사용할 수 있습니다. 자세한 내용은 전체 텍스트 검색에서 MySQL documentation을 읽어보십시오.

관련 문제