背景
讀取規則是按照某表中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插件,之前學習這個插件時看過的一個教程,分享給大家。