根據時間排序分頁查詢導致部分資料不準確
阿新 • • 發佈:2021-10-20
- 我們來觀察下以下sql 是否存在問題
SELECT id, orderNo, addTime
FROM deal_tab
ORDER BY addTime DESC
LIMIT 1,20
SELECT *
FROM deal_tab where pay_time >="2021-01-01" and pay_time < "2021-03-01"
LIMIT 1,20
-
以上的sql 在查詢過程中。總數可能與實際出現的資料內容可能會對不上
-
並且第二個sql語句沒有使用排序。實際是用的
pay_time
來進行排序的,也是不可取的。切記一定要在sql上加下指定的排序。 -
分析:在系統中,在新增資料比較多的表中,有可能會出現很多相同的時間。如果使用時間排序,Mysql無法判斷時間先後,也無法明確兩頁分隔的界限,那麼在分頁的過程中可能會導致某一筆或者好幾筆資料沒被分頁出來的現象
-
解決辦法:在對可能存在重複資料的欄位進行排序的時候,請增加一個輔助欄位來保證每次查出來的資料順序是一致的。且是遞增的。來保證資料的完整性
SELECT id, orderNo, addTime
FROM deal_tab
ORDER BY addTime DESC, id
LIMIT 1,20
SELECT *
FROM deal_tab where pay_time >="2021-01-01" and pay_time < "2021-03-01" order by id asc
LIMIT 1,20