精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分頁 + 模糊查詢 有坑!你知道嗎?

數據庫 MySQL
模糊查詢和分頁,如果分開用,一般是沒問題的。但如果它們要一起使用,一定要考慮排序問題。如果只是按照簡單的時間或者id排序,有些特殊的業務場景,沒辦法滿足,很容易出現bug。

前言

不知道你有沒有使用過Mysql的like語句,進行模糊查詢?

不知道你有沒有將查詢結果,進行分頁處理?

模糊查詢,加上分頁處理,會有意想不到的坑,不信我們繼續往下看。

我之前提供過一個品牌查詢接口,給前端品牌選擇控件使用的。

當時為了性能考慮,怕前端控件因為一次性加載太多的品牌,而導致頁面卡死。

因此,對品牌查詢接口做了分頁處理。

剛開始品牌表的數據比較少,沒有出現什么問題。

后來,產品加需求了,在品牌下拉選擇控件中,讓用戶可以輸入自定義品牌。

在用戶添加品牌前,需要先查一下,如果該品牌存在,則使用已有品牌。如果不存在,則新增品牌。(這里是精確匹配)

這個需求很簡單,很容易實現了。

后來,產品又加需求了,需要按名稱模糊查詢品牌。

該功能上線后,使用了很長一段時間,也沒啥問題。

突然,在不經意的某一天,這個功能卻出問題了。

到底怎么回事呢?

1、案發現場

某一天下午,運營找到測試反饋一個問題說:明明品牌蘇三,已經存在了,但用戶輸入關鍵字:蘇三時,系統沒有讓用戶直接選擇已有品牌,而是添加了一個叫:蘇三的自定義的品牌。

我過去一看,還真的有問題。

不一會兒,就定位到原因了,初步判斷是分頁的問題。

搜索關鍵字:蘇三,竟然出現了好幾頁的數據,把我驚呆了,品牌表怎么多了這么多數據了。

我查了數據庫,其實數據量并不是特別多,但有些品牌名稱比較特殊,有些品牌名稱是多個品牌名稱拼接而成的,比如:蘇三,李四 或者 蘇三,李四,王五,這是一個品牌。

其實是品牌名稱建的不規范導致的問題,但已經沒法讓運營修改品牌了,只能通過技術手段解決目前的問題。

查詢第一頁的數據sql:

select * from brand where name like '%蘇三%' 
order by edit_date desc limit 5;

執行結果:

圖片

我們可以看到,圖中并沒有等于蘇三這兩個字的數據。

注意:為了好演示,這里給的每頁大小是5,真實的場景并非如此。

查詢第二頁的數據sql:

select * from brand where name like '%蘇三%' 
order by edit_date desc limit 5,5;

執行結果:

圖片

從圖中看到,在第二行,出現了正好等于蘇三這兩個字的數據。

用戶搜索關鍵字:蘇三 時,前端頁面在調用品牌查詢接口,pageNo默認是1。由于能夠匹配關鍵字的數據太多了,第一頁返回不完,需要多頁才能全部返回。

前端獲取到第一頁的數據后,跟關鍵字:蘇三 做比較,發現沒有等于蘇三的品牌。

這樣就會在下拉控件中,自動添加一個品牌:蘇三,同時在右邊增加自定義標簽。

這樣就出問題了,明明蘇三這個品牌是有的,但用戶還能自定義一個蘇三,而不是直接選擇。

2、思考123

蘇三這個關鍵字,通過模糊查詢可以查詢出來,但由于品牌接口做了分頁,全匹配的品牌:蘇三,出現在第二頁了,才導致問題的產生。

如果要解決這個問題,讓它出現在第一頁不就OK了?

這時候,就有下面幾種解決方案。

(1)方案1

分頁查詢品牌接口,pageSize是5。

我們為什么不把pageSize調大一點?比如改成:200、500等。

這樣通過蘇三關鍵字,進行模糊查詢的時候,結果基本都在第一頁。

這樣就能非常快速的解決問題。

但有個缺點就是:如果這次調大了pageSize,但后面查詢關鍵字的品牌又出現在第二頁怎么辦?

不可能一直改pageSize吧?

(2)方案2

把分頁查詢接口的數據,拆分成兩部分:

  1. 精確查詢
  2. 模糊查詢

在代碼中做處理的時候,先根據關鍵字精確查詢,即sql中使用name='蘇三',這種方式查詢一次數據。

如果沒查出數據,則再直接用like '%蘇三'進行模糊查詢。

如果查出了一條數據,則把它放在返回結果集合中的第一位置。接下來,使用like '%蘇三'進行模糊查詢的時候,再加上條件 name <> '蘇三'。將查出的結果,從第二個位置往后放。

這樣可以拼接出你想要的集合。

但有個缺點,就是代碼耦合性太大了。

(3)方案3

之前,品牌蘇三在第二頁,最根本的原因是使用了edit_time字段進行逆序的。

也就是說,修改時間越大的越排在前面,而品牌蘇三的修改時間很小,所以排在第二頁了。

如果想品牌蘇三,排在第一頁,修改一下排序規則,不就搞定了?

可以改成按:id或者name字段排序。

用id字段排序,不太合適,雖說用了雪花算法,但跟修改時間類似,先插入的數據,會越小。

select * from brand where name like '%蘇三%' 
order by id desc limit 5;

用它排序的結果,跟使用修改時間排序差不了太多。

圖片

看來,只能使用name字段排序了。

3、如何排序?

我們在sql中直接對name字段,進行升序或者降序嗎?

顯然不是。

使用name字段降序:

select * from brand where name like '%蘇三%' 
order by name desc limit 5;

執行結果:

圖片

圖中并沒有看到我們想要的數據。

其實,使用name字段升序,也可能在第一頁查不出我們所想要的數據。

到底該如何處理呢?

假如,我們有這樣一種排序:

  1. 全匹配顯示在最前面,比如:蘇三。
  2. 數據左半部分匹配,右邊按字母排序,比如:蘇三1、蘇三2、蘇三說技術。
  3. 從中間開始匹配,比如:1蘇三、2蘇三。
  4. 第2步和第3步,還要根據字符長度排序,字符短的排在前面,比如:1蘇三、1蘇三1、蘇三說技術。

如果我們能實現上面的這種排序方式,這個問題就能完美解決了。

說起來容易,做起來難。

難道要先全匹配:name='蘇三',再有匹配:name like '蘇三%',再左匹配:name like '%蘇三',把查詢三次的結果組裝起來?

顯然這種做法有點low。

要實現上面我們設想的排序方式,在es中更好處理一下,但在mysql中要怎么處理呢?

4、解決方案

其實,我們可以換一種思路,根據字符的長度排序。

mysql給我們提供了很多非常有用的函數,比如:char_length。

通過該函數就能獲取字符長度。

sql調整如下:

select * from brand where name like '%蘇三%' 
order by char_length(name) asc limit 5;

name字段使用關鍵字模糊查詢之后,再使用char_length函數,獲取name字段的字符長度,然后按長度升序。

僅這一個騷操作,就搞定需求了:

圖片

我們所期待的:蘇三,終于排在第一個了。同時由于該sql做了分頁的,即使name字段在查詢時丟失了索引,執行效率也不會太低。

業務上的需求搞定了。

但追求完美的我們,好奇,想看看第二頁是什么情況:

select * from brand where name like '%蘇三%' 
order by char_length(name) asc limit 5,5;

執行結果:

圖片

并沒有按照我們設想的劇本進行下去,我們之前假設的3條排序中,第2條和第3條都沒有滿足。

這時該怎么辦?

答:可以使用mysql中的locate函數,通過它可以匹配的關鍵字,在字符串中的位置。

使用locate函數改造之后sql如下:

select * from brand where name like '%蘇三%' 
order by char_length(name) asc, locate('蘇三',name) asc limit 5,5;

執行結果:

圖片

完美,終于出現我們想要的結果了。

除此之外,還可以使用:instr和position函數,它們的功能跟locate函數類似,在這里我就不一一介紹了,感興趣的小伙伴可以找我私聊。

5、總結

其實,模糊查詢和分頁,如果分開用,一般是沒問題的。

但如果它們要一起使用,一定要考慮排序問題。

如果只是按照簡單的時間或者id排序,有些特殊的業務場景,沒辦法滿足,很容易出現bug。

當然解決上面問題,還有其他辦法,比如:pageSize調大一點,或者把全匹配放到第一頁。

但更優的方案,是通過mysql的函數來解決問題。

我們可以通過mysql提供的:char_length、locate、instr和position函數等,來實現很多復雜的排序功能。

責任編輯:姜華 來源: 蘇三說技術
相關推薦

2023-04-26 10:21:04

2020-10-08 18:58:46

條件變量開發線程

2020-12-24 15:26:07

Redis數據庫

2023-04-26 10:06:08

RocketMQ屬性Consumer

2022-09-29 12:20:48

CSS容器查詢

2022-01-09 23:20:50

手機國產蘋果

2023-12-07 07:08:09

Angular函數

2023-09-01 07:38:45

ArrayListArrayst實線類

2022-06-30 13:41:44

SQL 語句group by

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2022-03-13 18:53:31

interfacetypeTypeScript

2024-04-30 09:02:48

2023-12-20 08:23:53

NIO組件非阻塞

2023-12-12 08:41:01

2022-08-02 06:55:35

移動設備Android

2024-05-27 00:00:00

localhostIPv6IPv4

2022-12-09 19:00:02

Vite兼容性BigInt

2022-06-08 07:34:25

InnoDBdeleteMySQL

2024-03-26 00:10:08

預測AI泛化
點贊
收藏

51CTO技術棧公眾號

成人日韩在线电影| 亚洲视频一区二区| a级黄色片免费| 国产男男gay体育生白袜| 亚洲美女视频| 精品国产成人在线影院| 日韩avxxx| 男人的天堂在线视频免费观看 | 粉嫩av一区二区| 亚洲无人区一区| 日本黑人久久| www.日日夜夜| 美女久久一区| 欧美成人在线网站| 3d动漫精品啪啪一区二区下载| 99精品在免费线偷拍| 亚洲精品中文在线观看| 精品一区二区三区国产| 一级一级黄色片| 欧美精品偷拍| 国产亚洲欧洲高清| 91精品又粗又猛又爽| 亚洲精品国产嫩草在线观看| 一区二区欧美视频| 婷婷久久伊人| 天天综合网在线| 理论电影国产精品| 欧美一级大片在线观看| 国产女片a归国片aa| 亚洲综合小说图片| 日韩亚洲欧美在线| 亚洲免费看av| 悠悠资源网亚洲青| 亚洲午夜日本在线观看| 在线观看一区二区三区三州| 丝袜+亚洲+另类+欧美+变态| 国产一区二区三区在线观看免费| 日本精品久久久| 少妇久久久久久被弄高潮| 精品视频日韩| 精品视频在线播放| 亚洲香蕉中文网| 国产精品1区在线| 欧美视频中文一区二区三区在线观看| 99在线精品免费视频| av免费在线免费| 国产精品福利一区二区| 欧美一级二级三级九九九| 人妻少妇一区二区三区| 国产在线日韩欧美| 91久久精品国产| 亚洲中文字幕在线观看| 日韩激情中文字幕| 青草热久免费精品视频| 日韩欧美亚洲视频| 亚洲小说欧美另类婷婷| 欧美成人精品不卡视频在线观看| 国精产品视频一二二区| 日本大胆欧美| 在线播放国产一区中文字幕剧情欧美| 亚洲av无码国产精品久久| 欧美成人基地| 日韩成人av一区| 好吊一区二区三区视频| 欧美三级自拍| 亚洲精品资源美女情侣酒店| 亚洲一区二区乱码| 国产伦精品一区二区三区免费优势| 日韩一级高清毛片| 日韩高清一二三区| 国产精品对白| 日韩av在线免费观看一区| 一区二区视频观看| 一本色道久久综合亚洲精品酒店 | 国产成人精品免费视频| www.com国产| 日日欢夜夜爽一区| 成人av色在线观看| 99在线精品视频免费观看20| 国产精品18久久久久久久久久久久| 99re国产| 日本激情视频网站| 国产亚洲精品aa| 亚洲伊人婷婷| 黄a在线观看| 亚洲国产成人porn| 日韩亚洲在线视频| 日韩一级特黄| 精品三级在线看| 日本黄色片在线播放| 成人羞羞视频播放网站| 成年无码av片在线| 免费在线不卡视频| 美女mm1313爽爽久久久蜜臀| 91久久精品美女高潮| 亚洲精品国偷拍自产在线观看蜜桃| 成人午夜av在线| 欧美日韩亚洲免费| 国产福利在线播放麻豆| 亚洲va中文字幕| 婷婷激情四射五月天| 亚洲一区二区三区在线免费| 亚洲精品一区二三区不卡| 三级黄色录像视频| 亚洲狼人精品一区二区三区| 国产精品久久久久久久av大片| a级片在线视频| 久久婷婷综合激情| 一二三在线视频| 亚洲精品福利电影| 日韩一级视频免费观看在线| 97伦伦午夜电影理伦片| 亚洲综合小说| 国产精品第一页在线| 成人av无码一区二区三区| 久久久久久久国产精品影院| 黄色污污在线观看| 日本.亚洲电影| 亚洲成人免费在线视频| 国产三级aaa| 噜噜噜在线观看免费视频日韩| 51成人做爰www免费看网站| 韩国福利在线| 亚洲国产中文字幕在线视频综合| 色综合天天色综合| 牲欧美videos精品| 欧美极品少妇xxxxⅹ裸体艺术| 中日韩av在线| 91丨porny丨在线| 97超碰国产精品| 超碰国产精品一区二页| 国产亚洲一区二区在线| 综合激情网五月| 国产91综合一区在线观看| 一区二区三区四区视频在线观看| 成人免费影院| 亚洲第一区中文99精品| 精品自拍偷拍视频| 另类调教123区 | 日本亚洲欧洲色α| 免费成人在线看| 一区二区三区中文字幕精品精品 | 亚洲第一福利网站| 国产精品白嫩白嫩大学美女| 麻豆久久一区二区| 日韩亚洲视频| 成人看片在线观看| 亚洲天堂av图片| 麻豆精品久久久久久久99蜜桃| av激情综合网| 国产免费观看高清视频| 都市激情久久| 97国产精品免费视频| 国产极品久久久| 亚洲激情自拍视频| 三上悠亚 电影| 欧美区亚洲区| 国产日韩欧美综合精品| 爱看av在线入口| 亚洲高清久久网| 毛片视频网站在线观看| 91蜜桃免费观看视频| 国产高清精品在线观看| 国产一区二区观看| 国产精品欧美风情| 男人和女人做事情在线视频网站免费观看| 欧美日韩小视频| 国产成人免费在线观看视频| 久久精品国产99国产精品| 国产又黄又爽免费视频| 国产精品欧美一区二区三区不卡 | 欧美一区二区三区视频在线观看| 久久人妻无码aⅴ毛片a片app | 四季av一区二区凹凸精品| 成人av在线网址| 美女日批视频在线观看| 精品美女被调教视频大全网站| 国产无遮挡又黄又爽| 97久久精品人人做人人爽| 国产成人黄色片| 成人一二三区| 99se婷婷在线视频观看| 麻豆免费在线| 中文字幕久精品免费视频| 国产精品视频在线观看免费| 亚洲一区二区视频在线观看| 亚洲av无码一区二区三区网址 | 欧美一级小视频| 欧美日韩1区2区3区| 久久大片网站| 欧美a视频在线| 欧美激情18p| 免费一级在线观看| 欧美精品精品一区| 免费看日韩毛片| 中文字幕二三区不卡| 国产伦精品一区二区三区妓女下载 | 久久国产精品久久| 青青青国产精品| 国外色69视频在线观看| wwwww在线观看免费视频| 91精品久久久久久久99蜜桃| 亚洲精品视频在线观看免费视频| 中文天堂在线一区| 精品影片一区二区入口| 奇米精品一区二区三区在线观看 | 国产综合精品一区| 奇米影视首页 狠狠色丁香婷婷久久综合| 婷婷丁香久久| 庆余年2免费日韩剧观看大牛| jizz性欧美10| 夜夜嗨av色综合久久久综合网 | 精品视频在线播放| 亚洲国产精品二区| 欧美日韩高清影院| 亚洲综合久久网| 亚洲一本大道在线| 亚洲图片第一页| 久久婷婷国产综合国色天香| 老女人性生活视频| 老司机免费视频一区二区| jizzjizzxxxx| 精品成人久久| 国产日产欧美一区二区| 欧美亚洲国产激情| 欧美日韩精品免费观看视一区二区| 久久久久久亚洲精品美女| 国产精品免费视频xxxx| 在线日韩影院| 午夜精品国产精品大乳美女| 国产欧美黑人| 色爱av美腿丝袜综合粉嫩av| 欧洲天堂在线观看| 亚洲成年人在线| www.xxxx国产| 91麻豆精品91久久久久久清纯 | 丝袜国产在线| 久久久久北条麻妃免费看| 国产中文字幕在线观看| 日韩电影免费在线观看中文字幕 | 蜜桃传媒麻豆第一区在线观看| 人妻熟妇乱又伦精品视频| 在线观看一区视频| 97超碰国产精品| 国内精品久久久久国产盗摄免费观看完整版| 天堂资源在线亚洲资源| 欧美精品一区二区久久| 欧美激情导航| 蜜乳av综合| 欧美人xxxxx| 女人av一区| 久久五月天婷婷| 亚洲第一二三区| 农村寡妇一区二区三区| 日本久久成人网| 极品尤物一区二区三区| 日韩av字幕| 欧美成ee人免费视频| 美女少妇全过程你懂的久久| 欧美日韩一区二区三区免费| 国产影视一区| 亚洲一区二区三区乱码| 四虎国产精品免费观看| 男插女免费视频| 欧美日韩精品免费观看视频完整| 青草网在线观看| 午夜亚洲影视| 国产又大又黄又猛| 国产精品自拍三区| 欧美xxxxx精品| 久久综合色鬼综合色| 最近中文字幕免费视频| 中文字幕成人av| 全程偷拍露脸中年夫妇| 性做久久久久久免费观看| 久久99精品波多结衣一区| 日本道免费精品一区二区三区| www.久久网| 欧美一区二区视频在线观看2022 | 日韩h在线观看| 成人动漫在线播放| 久久影视免费观看| heyzo中文字幕在线| 秋霞av国产精品一区| 日韩美香港a一级毛片| 成人免费观看网站| 亚洲精品国产setv| 做爰高潮hd色即是空| 亚洲美女啪啪| 香蕉视频999| av在线不卡免费看| 欧美性生交大片| 精品久久久久久久中文字幕| 中文字幕+乱码+中文乱码www | 亚洲一级二级在线| 超碰在线97观看| 欧美mv日韩mv亚洲| 91在线品视觉盛宴免费| 久久久久久一区二区三区| 国产一区二区三区影视| 成人免费在线一区二区三区| 精品久久视频| 每日在线观看av| 久久国产精品区| 国产精品嫩草av| 亚洲欧美日韩国产综合| 久久久久久久亚洲| 亚洲国产精品女人久久久| 免费在线观看av| 欧美一级在线亚洲天堂| 香蕉大人久久国产成人av| 日韩精品另类天天更新| 亚洲福利电影| 中文字幕在线视频一区二区三区 | 天堂网avav| 在线观看国产日韩| 欧洲av在线播放| 毛片精品免费在线观看| 天然素人一区二区视频| 精品伦精品一区二区三区视频| 亚洲综合中文| 污视频网址在线观看| 国产校园另类小说区| 一区二区三区视频免费看| 日韩欧美国产wwwww| 免费看a在线观看| 国产精品精品国产| 猛男gaygay欧美视频| 久久综合九色综合88i| 粉嫩蜜臀av国产精品网站| 国产一二三区精品| 欧美日韩另类国产亚洲欧美一级| 欧美色综合一区二区三区| 久久久久久亚洲精品不卡| 66精品视频在线观看| 艳母动漫在线观看| 精品在线观看视频| 大地资源高清在线视频观看| 精品久久99| 国产在线高清精品| 日韩av专区| 男人添女人下面免费视频| 国产色一区二区| 国产又大又黄又粗| 亚洲欧美日韩图片| 国产超碰精品| 欧美一区二区三区在线播放 | 国产精品国产三级国产| 羞羞色院91蜜桃| 日韩在线观看你懂的| 青青草国产一区二区三区| 艳色歌舞团一区二区三区| 麻豆国产欧美日韩综合精品二区| 成人黄色免费网址| 欧美日韩精品一区视频| 免费av在线| 亚洲一区二区三区乱码aⅴ| 这里只有精品在线| 18禁一区二区三区| 午夜视频在线观看一区二区 | 国产欧美日韩网站| 99视频一区二区三区| 九九九在线观看| 在线精品播放av| av在线国产精品| 777av视频| 国产网站一区二区| 国产精品国产一区二区三区四区| 久久综合色影院| 久久超级碰碰| www.国产区| 亚洲欧美综合色| 精品国产999久久久免费| 午夜精品一区二区三区在线视频| 亚洲va久久| www.se五月| 亚洲国产va精品久久久不卡综合| 亚州精品国产精品乱码不99按摩| 国产成人久久久精品一区| 久久中文字幕av| 国产国语老龄妇女a片| 色av成人天堂桃色av| 日本天堂在线观看| 国产伦精品一区二区三区照片| 亚洲欧美日韩视频二区| www.99re6| 日韩精品视频在线观看网址| 777午夜精品电影免费看| 免费国产成人看片在线| 99在线视频精品| 国产尤物视频在线观看| 欧美国产日韩视频| 欧美精品系列| 中国黄色片视频| 欧美日韩高清一区二区不卡 | 欧美成人首页| 国产精品扒开腿做爽爽| 日韩欧美在线1卡| 精品网站在线| 国产女大学生av|