2011-12-08 17 views
2

私はMYSQLの全文検索を使用しています。PHP - MYSQL fulltext search

$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