通过相关sql进行搜索

ac1kyiln  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(251)

我很想从数据库中搜索字符串,但我希望它的相关性排序
我已经学过这个例子,相信效果不错。
搜索前
那只敏捷的棕色狗像狐狸一样跳起来。
敏捷的棕色狐狸跳过了懒狗。
敏捷的狐狸跳过西尔斯塔。
搜索后
quickbrownfox跳过了懒狗。
那只快步狗像狐狸一样跳起来。
狐狸跳过西尔斯塔。
使用的代码

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题