51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

mysql多条件模糊查询搜索结果优先按最佳匹配度排序

首先,我们需了解下mysql的locate函数: LOCATE(substr,str):返回字符串str第一次出现的子串substr的位置; LOCATE(substr,str,pos):返回第一次出现在字符串str的子串substr的位置,从位置pos开始。substr不在str中,则返回0。

SQL示例 - 搜索结果按关键词'充电'匹配度优先排序:

SELECT
	id,
	title,
	title_spell,
	LOCATE("贡院", housename) AS sort_index
FROM
	`xa_house`
WHERE
	`status` = 1
AND (
	(
		`title` LIKE '%未来%'
		OR `title` LIKE '%weilai%'
	)
	OR (
		`title_spell` LIKE '%未来%'
		OR `title_spell` LIKE '%weilai%'
	)
)
ORDER BY
	`sort_index` DESC,
	`sellstatus` DESC
LIMIT 10

有时我们不期望关键词较少时就主动干预排序,如: 当用户输入关键词长度大于或等于两个中文汉字时,我们对搜索结果按关键词匹配度优先排序: SQL示例:

SELECT
	id,
	title,
	title_spell,
	CASE
WHEN LENGTH('未来') > 5 THEN //一个汉字是 3 个字节,一个数字或字母是一个字节(UTF8)
	LOCATE('未来', title)
END AS sort_index
FROM
	`xa_house`
WHERE
	`status` = 1
AND (
	(
		`title` LIKE '%未来%'
		OR `title` LIKE '%weilai%'
	)
	OR (
		`title_spell` LIKE '%未来%'
		OR `title_spell` LIKE '%weilai%'
	)
)
ORDER BY
	`sort_index` DESC,
	`sellstatus` DESC
LIMIT 10

赞(1)
未经允许不得转载:工具盒子 » mysql多条件模糊查询搜索结果优先按最佳匹配度排序