Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按相关SQL进行搜索_Php_Mysql_Opencart2.x_Relevance - Fatal编程技术网

Php 按相关SQL进行搜索

Php 按相关SQL进行搜索,php,mysql,opencart2.x,relevance,Php,Mysql,Opencart2.x,Relevance,我想从数据库中搜索字符串,但我希望它按相关性排序 我已经学习了这个例子,相信它可以很好地工作 搜索前 那只敏捷的棕色狗像狐狸一样跳了起来 那只敏捷的棕色狐狸跳过了那只懒狗 那只敏捷的狐狸跳过了西尔斯塔 搜索后 敏捷的棕色狐狸跳过了懒惰的狗 那只敏捷的棕色的狗像狐狸一样跳了起来 那只敏捷的狐狸跳过了西尔斯大厦 使用的代码 SELECT * FROM `items` WHERE `description` LIKE 'quick' AND ( `description` LIKE 'brown'

我想从数据库中搜索字符串,但我希望它按相关性排序

我已经学习了这个例子,相信它可以很好地工作

搜索前

  • 那只敏捷的棕色狗像狐狸一样跳了起来
  • 那只敏捷的棕色狐狸跳过了那只懒狗
  • 那只敏捷的狐狸跳过了西尔斯塔
  • 搜索后

  • 敏捷的棕色狐狸跳过了懒惰的狗
  • 那只敏捷的棕色的狗像狐狸一样跳了起来
  • 那只敏捷的狐狸跳过了西尔斯大厦
  • 使用的代码

    SELECT *
    FROM `items`
    WHERE `description` LIKE 'quick'
    AND (
      `description` LIKE 'brown'
      OR `description` LIKE 'fox'
      OR `description` LIKE 'lazy'
      OR `description` LIKE 'dog'
    )
    LIMIT 0 , 30
    ORDER BY (
      (
        CASE WHEN `description` LIKE 'brown'
        THEN 1
        ELSE 0
        END
      ) + (
        CASE WHEN `description` LIKE 'fox'
        THEN 1
        ELSE 0
        END
      ) + (
        CASE WHEN `description` LIKE 'lazy'
        THEN 1
        ELSE 0
        END
      ) + (
        CASE WHEN `description` LIKE 'dog'
        THEN 1
        ELSE 0
        END
      )
    ) DESC
    
    我的问题是。当用户进行搜索时,搜索词是动态的。如何在order by之间为每个添加一个,以便搜索工作

    我已经试过了,但仍然知道它不起作用。首先,我不知道如何内爆+符号

    $sql .= " ORDER BY ";
    
    foreach ($words as $word) {
            $sql .= " ( CASE WHEN `pd.name` LIKE  '%".$word."%'
        THEN 1
        ELSE 0
        END) + "; 
           }
    $sql .= " ASC";
    
    这是一个Opencart搜索查询示例

    下面的代码可以工作,但如何使其动态

    $sql .= " ORDER BY 
    ( CASE WHEN pd.name like '%".$word1."%' THEN 1 ELSE 0 END) 
    + 
    ( CASE WHEN pd.name like '%".$word2."%' THEN 1 ELSE 0 END) DESC";
    

    不确定OpenCart的具体细节,但它可能值得一看;这将需要一个
    全文
    索引,尽管该索引可能已经存在,也可能尚未存在。您也可以将其卸载到类似的东西上。是否有选择?@kerbholz是的。任何发现我都很感激。@CD001解决方案不必与opencart相关。如果我得到一个通用的SQL答案,它将适用于me@kerbholz校正全文搜索不是一个选项。这些词已经分开了