2010-07-17 4 views
-1

나는 다음과 같은 문자열을 찾을 필요가 : 'C++'을이 같은MySQL의 MATCH 반대는 BOOLEAN 모드에 문제점을

내 SQL 쿼리의 모양을

SELECT * 
FROM shop_product 
WHERE 
    MATCH(shop_product.name, shop_product.product_model, shop_product.keywords, shop_product.part_number, shop_product.upc, shop_product.brand_name) 
    AGAINST ('c++' IN BOOLEAN MODE)) 
GROUP BY `product_id` 
LIMIT 0, 25 

는이 스크립트는 어떤 결과를 반환하지 않는 경우에도이 해당 단어가 들어있는 레코드가 존재합니다. 어떻게 해결할 수 있습니까?

감사합니다.

+0

그리고 귀하의 열은 적절한 전체 텍스트 색인을 가지고 있습니까? 당신의 테이블 MyISAM 테이블이 있습니까? –

+0

예, 열은 MyIsam 테이블의 전체 텍스트 색인입니다. – Emanuel

답변

1

"+"는 "단어"문자가 아닙니다. LIKE 또는 REGEXP를 사용해야합니다.

+1

일치하는 것에 대한 이스케이프 문자가 있습니까? – Emanuel

0

당신은 BOOLEAN 모드없이 검색 할 수 있습니다 :

SELECT * 
FROM shop_product 
WHERE 
    MATCH(shop_product.name, shop_product.product_model, shop_product.keywords, shop_product.part_number, shop_product.upc, shop_product.brand_name) 
    AGAINST ('c++')) 
GROUP BY `product_id` 
LIMIT 0, 25 

나는 + 그냥 부울 모드 특수 문자에 대해 생각합니다.

+0

내가 이해할 수있는 한, 문제는'+'를 색인하지 않는다는 것이다. 나는 완전히 틀릴지도 모른다! –

2

부울 모드 또는 자연 모드에서는 4 자 미만의 단어는 검색되지 않습니다.

관련 문제