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校正全文搜索不是一个选项。这些词已经分开了