今天写写项目,写到模糊查询的时候想到了应该匹配度高的信息考前,于是我就在网找了找,果然找到了方法。
需要用到case表达式
格式:
CASE
WHEN condition_1 THEN result_1
WHEN condition_2 THEN result_2
…
ELSE result END
案例:
SELECT `课程号`,
sum(CASE
WHEN 成绩 >= 60 THEN
1
ELSE
0
END
)as 及格人数 ,
sum(case when 成绩 < 60 THEN 1 ELSE 0 END)as 不及格人数
from score GROUP BY 课程号
下面是我的代码实现:
select
u.id,u.name,u.sex,u.portrait,u.resume
from tb_user as u
where
u.name = #{userName} or u.name like concat('%',#{userName},'%')
order by
case
when u.name like concat('%',#{userName},'%') then length(REPLACE(u.name,#{userName},''))/length(u.name)
end
结果:
但是有一个问题,如上图的案例,如果搜索的是莴苣1,那么就什么也搜不到了