在实际开发中遇到一个有趣的问题,有关数据库order by排序不唯一,导致分页出现重复数据问题。
项目中需要对创建时间进行降序查询,每页显示3条
初始查询:
select * from material WHERE 1=1 and status = 2 order by create_time desc LIMIT 3,3;
再进行查询下一页时会出现重复的数据
select * from material WHERE 1=1 and status = 2 order by create_time desc LIMIT 6,3;
俩张图对比我们可以清楚的看到id24的查询了俩次,我的解决方案进行SQL改写:先通过时间排序再通过Id排序,id是唯一字段
修改后的sql:
初始查询:
select * from material WHERE 1=1 and status = 2 order by create_time desc ,id desc LIMIT 3,3;
下一页查询:
select * from material WHERE 1=1 and status = 2 order by create_time desc ,id desc LIMIT 6,3;
可以看到数据已经不再重复,成功解决