需要帮助调整select查询以将Match / Against子句更改为Like子句

时间:2016-06-02 13:38:47

标签: php mysql sql-server string-matching sql-like

我目前正在尝试将LIKE子句合并到我的SQL select语句中,并取出关联的MATCH / AGAINST子句。

我尝试了很多不同的变体,觉得我错过了一些东西,因为似乎还没有。

完整的php页面

<?php

    if(isset($_POST['searchQuery']))
    {
          require_once('config.inc.php');
          $search_query=$_POST['searchQuery'];

          $sql = 'SELECT * from tbl_fish where MATCH(fish_name,size_name,cat_name) AGAINST(:search_query)';

          $statement = $connection->prepare($sql);
          $statement->bindParam(':search_query', $search_query, PDO::PARAM_STR);
          $statement->execute();
          if($statement->rowCount())
          {
                $row_all = $statement->fetchall(PDO::FETCH_ASSOC);
                header('Content-type: application/json');
                echo json_encode($row_all);
          }  
          elseif(!$statement->rowCount())
          {
              echo "no rows";
          }
    }
?>

我已尝试过像这样的陈述

 $sql = 'SELECT * from tbl_fish WHERE (fish_name LIKE '%'searchQuery'%')';

但我还没有找到一个工作的。这些结果正在从一个Android应用程序中查询,所以我想知道我是否错过了一些不仅仅是改变那个语句的东西。我正在关注这个教程,除非我尝试更改查询的参数,否则一切正常。

希望得到你们的反馈。谢谢。

1 个答案:

答案 0 :(得分:1)

为了构建一个合适的like子句,你可以使用concat

$sql = "SELECT * from tbl_fish WHERE  fish_name LIKE concat ( '%', :searchQuery, '%')";

并匹配你应该使用的3列OR

$sql = "SELECT * from tbl_fish 
   WHERE  fish_name LIKE concat ( '%', :searchQuery, '%')
     or size_name   LIKE concat ( '%', :searchQuery, '%')
     or cat_name    LIKE concat ( '%', :searchQuery, '%');";