ZERO
????持續(xù)更新 請關(guān)注:https://zorkelvll.cn/blogs/zorkelvll/articles/2018/11/02/1541172141731
背景
??本文主要是介紹mysql中對于模糊查詢的結(jié)果森篷,進行再次排序問題的解決思路,比如模糊查詢的結(jié)果希望按照“KeyWord”犯戏、“KeyWord%”固蚤、“%KeyWord”娘汞、“%KeyWord%”方式排序,又如希望按照匹配度從高到低進行排序等!
背景一
??在一些模糊查詢的過程中夕玩,有一些需求對于查詢結(jié)果的排序問題你弦,如查詢keyWord的值為“萬科”,常常需要希望對于模糊查詢的結(jié)果排序規(guī)則最好為“萬科”燎孟,“萬科%”禽作,“%萬科”,"%萬科%"揩页,一種解決辦法是通過編程語言如java中去處理暫且不提旷偿,在此則提供一種SQL解決方案,具體sql可參考如下:
<select id="findAllByParam" parameterType="com.idwzx.info.domain.ViewQuickMacroParam"
resultType="com.idwzx.info.domain.ViewQuickMacroResult">
SELECT v.type,v.trd_code trdCode,v.name,v.name_py namePy
FROM V_QUICK_MACRO v
<include refid="conditionOrAll"/>
<include refid="limitSql"/>
</select>
<sql id="conditionOrAll">
<where>
<if test="keyWord != null and keyWord != ''">
AND (trd_code LIKE concat('%',#{keyWord},'%')
OR `name` LIKE concat('%',#{keyWord},'%')
OR name_py LIKE concat('%',#{keyWord},'%'))
order by
(case
when trd_code = #{keyWord} then 10
when `name` = #{keyWord} then 11
when name_py = #{keyWord} then 12
when trd_code like concat(#{keyWord},'%') then 20
when `name` like concat(#{keyWord},'%') then 21
when name_py like concat(#{keyWord},'%') then 22
when trd_code like concat('%',#{keyWord}) then 30
when `name` like concat('%',#{keyWord}) then 31
when name_py like concat('%',#{keyWord}) then 32
when trd_code like concat('%',#{keyWord},'%') then 40
when `name` like concat('%',#{keyWord},'%') then 41
when name_py like concat('%',#{keyWord},'%') then 42
else 50
end )
</if>
</where>
</sql>
<sql id="limitSql">
<if test="limitCount gt 0">
<![CDATA[ LIMIT #{limitCount} ]]>
</if>
<if test="limitCount eq 0">
LIMIT 50
</if>
</sql>
背景二
??在模糊查詢的過程中爆侣,根據(jù)匹配度進行排序