2012-06-21 6 views
1

문제점 : SQL 검색 쿼리에서 전체 텍스트 인덱스를 사용하려고하지만 어떤 이유로 데이터베이스에서 어떤 게시물을 반환하지 않습니다SQL 검색 쿼리

.

PHP/SQL 코드 :

$string = mysql_real_escape_string($_POST['searchtext']); 

$query = "SELECT 
      EID, 
      CONCAT (u1.Firstname, ' ', u1.Lastname) AS Examiner, 
      Supervisor, 
      ExaminationDate, 
      FirstAuthor, 
      SecondAuthor, 
      Level, 
      Credits, 
      Completed 
     FROM betyg_essays grade 
      INNER JOIN betyg_users u1 ON grade.Examiner = u1.UID 
     WHERE 
      MATCH (Supervisor, FirstAuthor, SecondAuthor) AGAINST ('$string') 
     ORDER BY 
      EID ASC 
"; 

MySQL의 테이블 정의 :이 게시물과 함께 데이터베이스에

enter image description here

칼럼 :

enter image description here

시나리오 :

난 단지 검색하면 "당"이 두 번째 게시물을 반환해야합니다.

+0

당신이 테이블 DDL를 제공 할 수 있습니까? 전체 텍스트 색인을 어떻게 지정 했습니까? – acme

+0

검색어를 백분율 기호로 묶으시겠습니까? –

+2

[sql injection] (http://en.wikipedia.org/wiki/SQL_injection)에 지금 매우 취약합니다! 귀하의 의견을 피하거나 PDO 또는 Mysqli를 사용하십시오! – Bono

답변

0

전체 텍스트 색인 정의가 정확하다고 가정하면 (테이블 정의를 게시해야 함) MySQL은 표준 설치에서 최소 4 자 이상의 단어 색인만을 생성합니다. MySQL documentation에 설명 된대로

[mysqld] 
ft_min_word_len=3 

게다가, 당신은 임계 값 및 스톱 워드리스트를 확인해야합니다 : 당신은 검색에서 3 문자 - 단어를 지원하려는 경우 ft_min_word_len을 설정하여 my.cnf에 그것을 변경해야합니다.

편집 :

당신의 table definition 당신이 MySQL을 5.6.4까지 전체 텍스트 인덱스를 지원하지 않는 InnoDB의 테이블을 사용하는에 따르면. 그게 전부 였어? 그리고 정의에 정의 된 전체 텍스트 색인을 볼 수 없습니다.

이런 일이 있어야합니다 :

... FULLTEXT KEY `keywords` (`keywords`) ... 

테이블에 전체 텍스트 인덱스가 ALTER TABLE 구문을 사용 추가하려면

ALTER TABLE betyg_essays ADD FULLTEXT(FIELD1, FIELD2, ...); 
+0

"svensson"검색을 시도했지만 결과가 제로가되었습니다. – kexxcream

+0

대신 MyISAM을 권하고 싶습니까? 전체 텍스트 인덱스를 정의했는지 확신 할 수 없지만이 문제에 대한 조언을 얻을 수있는 기회는 무엇입니까? – kexxcream

+0

서버 설치가 MySQL 5.6.4 이하인 경우에는 전체 텍스트 색인으로 MyISAM을 사용해야하며, 옵션이 없거나 Sphinx와 같은 서버 검색 엔진을 사용하십시오.http://devzone.zend.com/26/using-mysql-full-text-searching/에서 전체 텍스트 색인의 사용법을 설명하는 것이 좋습니다. – acme