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

Posted

技术标签:

【中文标题】需要帮助调整选择查询以将 Match/Against 子句更改为 Like 子句【英文标题】:Need help tuning a select query to change a Match/Against clause to a Like clause 【发布时间】:2016-10-02 06:58:07 【问题描述】:

我目前正在尝试将LIKE 子句合并到我的 SQL 选择语句中并取出关联的 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 应用程序中查询的,所以我想知道我是否遗漏了一些东西,而不仅仅是更改了一个语句。我正在关注一个教程,除了我尝试更改查询的参数时,它都可以正常工作。

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

【问题讨论】:

我敦促您重新考虑。匹配可以使用索引,但像 %something% 一样不能。如果您有超过几千条记录,您的查询速度将会非常缓慢。 我最终会重新调整表和数据的用途,使其成为包含 190 条左右记录的员工数据库,因此它不应该太长。你对此有何看法 是的,对于这么多的记录,一切正常!你甚至不需要主键!! (开玩笑的主键) 【参考方案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, '%');";

【讨论】:

非常感谢,但现在我得到 Json 错误,例如 org.json.JSONException: Value 类型 java.lang.String 无法转换为 JSONArray,当我在 android studio 中进行测试时。这是什么意思,我该如何解决它 最后一个错误与您发布的问题无关..为此,您应该专门针对您的新问题发布另一个问题..如果我的回答是正确的,请将其标记为已接受 听起来不错,再次感谢伙计。因为我是新手。到那时,我会将什么标记为下一个问题? 那么与 JSON 相关,我建议 PHP 和 JSON ENCODE 避免像使用 sqlserver 一样引用不正确的标签 .... 如果是 mysql 不能是 sqlserver)

以上是关于需要帮助调整选择查询以将 Match/Against 子句更改为 Like 子句的主要内容,如果未能解决你的问题,请参考以下文章

调整查询以使用 CTE

需要帮助调整 sql 查询

调整 OBIEE 生成的 SELECT 查询

数据库引擎调整顾问

需要帮助修复代码以将文本框中的值转换为 ActionScript 3 中的变量

媒体查询断点上的 CSS 重置值(调整窗口大小或方向更改)