背景
读取规则是按照某表中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插件,之前学习这个插件时看过的一个教程,分享给大家。