2011-12-08 142 views
2

我有一個MYSQL全文搜索,與我的數據庫中的項目匹配,這很好用。PHP - MYSQL全文搜索

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

從那裏我細化查詢取決於用戶想要過濾。我有2個過濾器,素食和breadtype

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

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

其中追加全文說法,現在這個完美的作品,雖然我的問題是,如果 用戶沒有任何搜索(空字符串),我希望它返回數據庫中的所有結果。

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

現在意味着上述if語句我不能追加$ select語句,並且必須使用WHERE語句來代替 - 但是這將意味着增加2個額外的if語句,以補償。反正MYSQL有這樣做。

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

我只接受正確答案。 – Adam

回答

1

您可以簡單地使用WHERE 1=1然後附加其餘的。如果沒有額外的ANDOR s,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