gpt4 book ai didi

mysql - SQL 搜索名称并按最佳匹配排序

转载 作者:可可西里 更新时间:2023-11-01 08:44:46 25 4
gpt4 key购买 nike

我有一个带有商店数据库的网站。我网站的访问者可以按名称搜索商店,目前 SQL 查询是这样完成的:

SELECT * 
FROM tbl_shop
WHERE LOWER(`name`) LIKE LOWER(`%text1%`)
OR LOWER(`name`) LIKE LOWER(`%text2%`)
.....
OR LOWER(`name`) LIKE LOWER(`%textN%`)

这工作得很好,但问题是,结果没有按最佳匹配排序。一些商店名称包含非常常见的词(例如“Na Lavce”),如果您输入此字符串,所有包含“%na%”(很多)的沙龙都会显示为结果。

正因为如此,访问者可以获得许多结果,但有时无法找到他正在寻找的内容,因为正确的结果位于例如第 5 个结果页面上。有什么解决办法吗?

最佳答案

SELECT * 
FROM tbl_shop
WHERE
LOWER(`name`) LIKE LOWER(`%text1%`)
OR LOWER(`name`) LIKE LOWER(`%text2%`)
.....
OR LOWER(`name`) LIKE LOWER(`%textN%`)
ORDER BY
CASE WHEN LOWER(`name`) LIKE LOWER(`%text1%`) THEN 1 ELSE 0 END +
CASE WHEN LOWER(`name`) LIKE LOWER(`%text2%`) THEN 1 ELSE 0 END +
.....
CASE WHEN LOWER(`name`) LIKE LOWER(`%textN%`) THEN 1 ELSE 0 END
DESC

如果你想按术语顺序排名:

ORDER BY
CASE WHEN LOWER(`name`) LIKE LOWER(`%text1%`) THEN 1024 ELSE 0 END +
CASE WHEN LOWER(`name`) LIKE LOWER(`%text2%`) THEN 512 ELSE 0 END +
CASE WHEN LOWER(`name`) LIKE LOWER(`%text2%`) THEN 256 ELSE 0 END +
.....
CASE WHEN LOWER(`name`) LIKE LOWER(`%textN%`) THEN 1 ELSE 0 END
DESC

关于mysql - SQL 搜索名称并按最佳匹配排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31896592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com