2017-03-09 6 views
0

검색 페이지에서 citroen을 검색 할 때 검색 결과를 얻었지만 검색 할 때 검색 결과를 얻지 못하면 결과가 표시되지 않습니다. 이는 테이블에 black'n roll처럼 쓰여졌 기 때문입니다. 어떤 사용자는 blackn roll을 검색하고 싶지만 결과를 얻지 못할 수도 있습니다. 어떻게 해결할 수 있습니까? 또한 같은 V-시간 같은 행과 speacial 문자 "&은 /(). 나는 MySQL은 그들을 무시해야합니다. 당신은 문자를 알고있는 경우 (대체 할)아포스트로피 전체 텍스트 검색 mysql

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against('citroen')"; 

답변

0

이미 다음, 당신은 MySQL을의 REPLACE을 사용할 수 있습니다 기능 %로 교체하고 LIKE 비교를 수행하기 위해, 예를 들면 :

create table test(value varchar(100)); 
insert into test values ('black''n roll'); 


SELECT value 
FROM test 
WHERE 'blackn roll' LIKE CONCAT('%', REPLACE(value, '''', '%'), '%'); 

당신은 입력 문자열에 'blackn 롤'을 대체하고 하나 개의 문자 이상을 교체해야하는 경우 중첩 된 REPLACE 기능을 사용할 수 있습니다

,691.
+0

답변 해 주셔서 감사합니다. 그 다음 두 결과를 모두 반환합니까? 어떤 사용자는 blackn roll을 검색 할 수 있으며, 일부 사용자는 black'n roll을 검색 할 수 있습니다. 그래서 동일한 결과를 얻을 수 있습니까? – codeigniter

+0

예, 두 경우 모두에서 결과를 반환합니다. –

0

백 슬래시는 MySQL의 이스케이프 문자입니다. 다음을 시도해 볼 수 있습니다. 전체 텍스트 인덱싱은 단어 종결 자 때문에 조금 이상합니다.

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against ('black\'n roll' IN BOOLEAN MODE);" 

그래도 작동하지 않으면 단어를 개별적으로 찾으십시오. 단어 길이 또한 중요한 요소이며 작은 단어 (기본적으로 4 자 미만)는 색인되지 않습니다.

$sql = "SELECT * FROM arac 
     INNER JOIN suv_marka ON arac.marka = suv_marka.id 
     WHERE match(suv_marka.marka) against ('black' + 'roll' IN BOOLEAN MODE);"