使用 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