MySQL中orderby和limit分頁數據重復的問題


背景

讀取規則是按照某表中sequence字段排序的,而這個字段是讓人手工填寫的。那么,可想而知,數據一多,難免會出現填寫的值相同的情況。
綜上所述,可能就會導致以下兩條sql出現數據重疊的情況:

select * from table order by sequence(包含重復值的字段) limit 0,10
select * from table order by sequence(包含重復值的字段) limit 10,10

說明

從網上找了一篇對此問題解釋的文章,這里不做贅述。問題產生的原因大致是:

mysql5.6優化器做的一個優化,使用了priority queue,而5.5版本不會出現。

感情趣的可以點一下: https://segmentfault.com/a/1190000004270202

解決辦法

我能想到的解決辦法有兩個

1.現有數據基礎上

可以通過修改sql語句中order by后的字段。在不影響預期排序結果的情況下把sql語句改為按照兩個維度排序:

select * from table order by sequence desc,id asc limit 0,10

2.避免手動填寫排序字段

因為手動填寫排序字段,就不太容易能避免出現值重復的情況,所以干脆采用jQuery拖動插件來排序,讓后端程序根據前台展示的順序來來排序。
可以使用jQuery List DragSort插件,之前學習這個插件時看過的一個教程,分享給大家。

jQuery List DragSort插件教程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM