mysql order by+limit分页重复数据问题
问题解析
从错误的 order by 案例中,使用 order by age 字段正序排列,由于同一个班级的小朋友 age 相同的频率极高,所以这样的排序是不稳定的。
解决方案
如果第一优先级是必须以 age (年纪) 来做为排序条件,那么为了保证分页后排序的稳定性,需要添加一个唯一性字段 id 或其它唯一性字段来做为第二排序条件。这样分页后就不会由于不稳定排序而导致重复数据的出现。
总结
如果不加排序字段,直接分页查询,这时候sql是没办法保证出来查询的数据的顺序,故会导致重复的分页数据。这就是为什么limit分页语句之前一定要进行order by排序的根本原因。
特别注意:虽然分页语句之前加了排序字段,但是如果排序字段有大量的重复的数据话,这个时候分页也会出现重复的分页数据,所以解决办法:
1、多个排序字段。2、唯一id的排序字段。
对于没有应用ORDER BY的LIMIT子句,得到的结果同样是无序的,所以,很多时候,我们都会看到LIMIT子句会和ORDER BY子句一起使用。