MySQL order by limit 分页数据重复问题 并 丢失其他数据

使用 order by 与limit 同时使用 数据出现重复 并丢失其他数据

使用了 下面的 方法  发现也没什么问题 

Db::name('users')
->where(['is_disabled'=>0])
->field('id,nickname,team_son+team_grandson as sort,team_son,team_grandson')
->order('sort desc')
->page($page, 20)
->select();
 打印sql 语句 去运行  发现 第i 页 的数据 与 第 i+1 页 的 数据出现重复 并且 丢失了一些数据

SELECT `id`,`nickname`,team_son+team_grandson as sort,`team_son`,`team_grandson` FROM `table_name` WHERE
`is_disabled` = 0 ORDER BY `sort` DESC LIMIT 200,20


经过学习 发现  在MySQL 5.6的版本上,优化器在遇到order by limit语句的时候,做了一个优化,即使用了priority queue。

若再想 使用 order by 加 limit的 形式 

1、 就只能 使用 索引 进行排序

2、像我这样的情况 不能使用 索引字段的话 只能进行 双排序

也就是   ORDER BY `sort` DESC,`id` 把索引字段作为 附加条件 进行排序 就可以了 

SELECT `id`,`nickname`,team_son+team_grandson as sort,`team_son`,`team_grandson` FROM `users` WHERE
`is_disabled` = 0 ORDER BY `sort` DESC,`id` ASC LIMIT 200,20


原文链接:https://blog.csdn.net/qq_40816144/article/details/103940242

posted @ 2021-05-10 13:18  LZ太热  阅读(197)  评论(0编辑  收藏  举报