2011-12-08 3 views
2

내 데이터베이스의 항목과 일치하는 MYSQL 전체 텍스트 검색이 있습니다.PHP - MYSQL fulltext 검색

$select = "SELECT * from menu WHERE MATCH(item) AGAINST('$this->food') "; 

거기에서 사용자가 필터링 할 대상에 따라 쿼리를 수정합니다. 내 문제는 사용자가 어떤 (빈 문자열)을 검색하지 않습니다 만약 내가 그것을 원하는 있지만 나는 채식주의 2 개 필터, 을 가지고 전체 텍스트 문을 추가

if(isset($this->vegetarian)) { 
     echo $select .= " AND vegetarian='$this->vegetarian'"; 
    } 

    if(isset($this->bread)) { 
     echo $select .= " AND bread='$this->bread'"; 
    } 

은, 지금은 완벽하게 작동 breadtype 데이터베이스의 모든 결과를 반환합니다. 하지만 그 문은 그 보상 할 경우 추가로 2를 추가하는 의미 - 지금은 문 위의 경우와 $ select 문을 추가 할 수 없음을 의미하고, 대신 WHERE 문을 사용하는 것

if(empty($this->food)) { $select = "SELECT * from menu"; } 

. 어쨌든 MYSQL이 대신 그것을 할 수 있습니까?

if(isset($this->vegetarian) && empty($this->food)) { 
     echo $select .= " WHERE vegetarian=$this->vegetarian"; 
    } 
+0

정답 만 수락합니다. – Adam

답변

1

간단히 WHERE 1=1을 사용하고 나머지는 덧붙일 수 있습니다. 추가 AND 또는 OR이없는 경우 MySQL은이 부분을 무시합니다.

+0

대단히 감사합니다. 대단히 감사합니다. 내가 할 수있는대로 최대한 빨리 답변을 수락하겠습니다. – Adam

1
$select = "SELECT * from menu WHERE MATCH(item) AGAINST('$this->food') "; 
if(empty($this->food)) { 
    $select = "SELECT * from menu WHERE 1=1"; // if food is empty we overwrite the $select variable 
} else { 
    if(isset($this->vegetarian)) { 
     $select .= " AND vegetarian='$this->vegetarian'"; 
    } 

    if(isset($this->bread)) { 
     $select .= " AND bread='$this->bread'"; 
    } 
} 

아니면 뭔가 부족합니까?

+0

그 답은 제가 찾고있는 것이기도합니다. – Adam