我很想从数据库中搜索字符串,但我希望它按相关性排序
我已经选择了这个示例,并且可以正常工作。
搜索之前
- 那只棕色的快狗跳起来像狐狸。
- 那只敏捷的棕色狐狸跳过了那只懒狗。
- 狐狸跳过了西尔斯大厦。
搜索后
- 快速 棕色 狐狸跳过了懒惰 狗。
li>- 快速 棕色 狗跳下了 fox 状。
- 快速 fox 跳过了西尔斯大厦。
使用的代码
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
我的问题是。用户进行搜索时,搜索词是动态的。如何在顺序之间为每个添加一个,以使搜索起作用。
我尝试过的东西,但我仍然知道它不会起作用。首先,我不知道如何使+符号爆破
$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";