首页 文章

PHP - MYSQL全文搜索

提问于
浏览
2

我有一个MYSQL全文搜索,匹配我的数据库中的项目,这很好 .

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

从那里我根据用户想要过滤的内容细化查询 . 我有2个过滤器, vegetarian and breadtype

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

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

这附加了fulltext语句,现在这完全可以工作,虽然我的问题是如果用户不搜索任何内容(空字符串),我希望它返回数据库中的所有结果 .

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"; 
    }

2 回答

  • 1

    你可以简单地使用 WHERE 1=1 然后追加其余部分 . 如果没有额外的 ANDOR ,MySQL将忽略此部分 .

  • 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'";
        }
    }
    

    或者我错过了什么?

相关问题