mysql實(shí)現(xiàn)模糊查詢并按匹配程度排序
mysql模糊查詢并按匹配程度排序
寫(xiě)項(xiàng)目,寫(xiě)到模糊查詢的時(shí)候想到了應(yīng)該匹配度高的信息考前,于是我就在網(wǎng)找了找,果然找到了方法。
需要用到case表達(dá)式
格式:
CASE WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 … ELSE result END
案例
SELECT `課程號(hào)`, sum(CASE WHEN 成績(jī) >= 60 THEN 1 ELSE 0 END )as 及格人數(shù) , sum(case when 成績(jī) < 60 THEN 1 ELSE 0 END)as 不及格人數(shù) from score GROUP BY 課程號(hào)
代碼實(shí)現(xiàn)
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
結(jié)果:
但是有一個(gè)問(wèn)題,如上圖的案例,如果搜索的是萵苣1,那么就什么也搜不到了
mysql使用case when實(shí)現(xiàn)模糊查詢搜索相似度達(dá)三個(gè)字以上
突然接到一個(gè)需求 說(shuō)搜索要加一個(gè)條件 模糊查詢的時(shí)候要搜索到的數(shù)據(jù)得是相似度達(dá)到三個(gè)字以上的結(jié)果
雖然sql不是很難 但是感覺(jué)確實(shí)需要記錄一下
首先在impl實(shí)現(xiàn)層把傳過(guò)來(lái)的字符串格式的搜索條件進(jìn)行一個(gè)格式轉(zhuǎn)換 轉(zhuǎn)換成數(shù)組
然后在mybatis里面進(jìn)行一個(gè)foreach循環(huán)遍歷
sql如下:
在這里使用了mysql的CASE WHEN 關(guān)鍵字 當(dāng)模糊查詢搜索到的時(shí)候就賦個(gè)值為1沒(méi)有搜索到則是0 以此相加 最后where條件里面加個(gè)判斷 查詢結(jié)果>=3的就ok了
這是這條sql的運(yùn)行結(jié)果 一切ok
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySql?InnoDB存儲(chǔ)引擎之Buffer?Pool運(yùn)行原理講解
緩沖池是用于存儲(chǔ)InnoDB表,索引和其他輔助緩沖區(qū)的緩存數(shù)據(jù)的內(nèi)存區(qū)域。緩沖池的大小對(duì)于系統(tǒng)性能很重要。更大的緩沖池可以減少磁盤I/O來(lái)多次訪問(wèn)同一表數(shù)據(jù)。在專用數(shù)據(jù)庫(kù)服務(wù)器上,可以將緩沖池大小設(shè)置為計(jì)算機(jī)物理內(nèi)存大小的百分之802023-01-01詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實(shí)現(xiàn)mysql從零開(kāi)始
注意:這里說(shuō)的delete是指不帶where子句的delete語(yǔ)句 相同點(diǎn): truncate和不帶where子句的delete, 以及drop都會(huì)刪除表內(nèi)的數(shù)據(jù)2008-04-04Mysql 5.6 "隱式轉(zhuǎn)換"導(dǎo)致的索引失效和數(shù)據(jù)不準(zhǔn)確的問(wèn)題
這篇文章主要介紹了Mysql 5.6 “隱式轉(zhuǎn)換”導(dǎo)致的索引失效和數(shù)據(jù)不準(zhǔn)確的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12MySQL備份與恢復(fù)之真實(shí)環(huán)境使用冷備(2)
這篇文章主要介紹了MySQL備份與恢復(fù)之真實(shí)環(huán)境使用冷備,需要的朋友可以參考下2015-08-08MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解
這篇文章主要為大家介紹了MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09mysql中的四大運(yùn)算符種類實(shí)例匯總(20多項(xiàng))?
這篇文章主要介紹了mysql中的四大運(yùn)算符種類匯總,運(yùn)算符連接表達(dá)式中的各個(gè)操作數(shù),他的作用是用來(lái)指明對(duì)數(shù)據(jù)表中的操作數(shù)所進(jìn)行的運(yùn)算2022-07-07