Mysql中通过Limit分页、获取页码、索引不一致问题
Mysql对Limit使用问题
这是mysql中limit分页的语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引 , 查询条目数;
每页显示3条数据,查询第一页
select * from limit 3,3;
每页显示3条数据,查询第1页数据
select * from stu limit 0 , 3;
每页显示3条数据,查询第2页数据
select * from stu limit 3 , 3;
每页显示3条数据,查询第3页数据
select * from stu limit 6 , 3;
从上面的练习推导出起始索引计算公式:
起始索引 = (当前页码 - 1) * 每页显示的条数
现在,我要查询第5页select * from tbl_emp limit 15,3;
按照上面的公式计算:
我在查询第6页
select * from tbl_emp limit 18,3;# limit 语法: SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
# limit 起始索引(18) * 查询条目数(3) 索引0开始 就展示第19条
# 展示的数据: 19,20,21
# 页面数据: 18(索引)/3 = 6(页码);
# 起始索引(公式) = (页码[6] - 1) * 每页显示条数(3) = 15;
我发现了,这不对数据不是一致性,这页码没有算出来起始索引.
我发现我可能理解错误了
接着回到那条sql
select * from stu limit 18,3; # limit 语法: SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询条目数;
# limit 起始索引(18) * 查询条目数(3) 索引0开始 就展示第19条
# 展示的数据: 19,20,21
# 页面数据:
应该从展示的数据的最后一位(21)去获取值,我们接着看
页面数据:查询最后一位->21(条) / 3(显示) = 7(页码);
# 接着来算起始索引(公式):
# 起始索引 = (页码 - 1) * 每页显示条数;
(页码)(7 - 1) = 6;
6 * 3(每页显示条数) = 18(起始索引);
# 发现没有 起始索引算出来了
疑问
大家可能会有小问题,说我分页后的数据没有是19,20,没有21了,21给我删掉了,那怎么办,mysql会怎么帮我们解决呢?答:向上取整数,不管你有没有21,有没有20,只要前面数据正常,有18,你在插入一条数据19,哎,他就会帮我们默认多显示一页数据,就是查询条目数。
最后:
本来我是向来请教大家这个问题的,可能是我方式不对,就分页很不懂,我就去看,很多老师告诉了我们计算 起始索引计算方式,缺少了页码获取,我就一头雾水,这个页码怎么能去拿索引获取的,不对啊,原来是我方式错误了,方法对确实能解决很多问题啊,最后页码获取为
分页后的数据最后一条 / 显示的数据 = 页码
分页后起始索引获取: 起始索引= (页码-1) * 页码
页码-1是因为索引从0开始的,不懂的兄弟可以回去复习复习(数组).
最后,谢谢您的观看!!!! 欢迎指错
回答:
0.0 问答版本你就直接发疑问吧
回答:
大家可能会有小问题,说我分页后的数据没有是19,20,没有21了,21给我删掉了,那怎么办,mysql会怎么帮我们解决呢?答:向上取整数,不管你有没有21,有没有20,只要前面数据正常,有18,你在插入一条数据19,哎,他就会帮我们默认多显示一页数据,就是查询条目数。
额,你这理解都不知道偏到哪儿去了。
offset + limit 这种分页方式,跟 ID 啥的都没啥关系,简单地说,他其实就是类似于数组的 slice
方法,传入一个起始位置(offset) 和要截取的数量(limit)。也就是说,他是实际会把前面的数据都拿出来,然后丢弃,这也就是为什么大页码分页不推荐使用 offset + limit 的原因。
回答:
真的佩服你打这么多字,然后也没有总结出啥来,帮你整理一下吧。
问题:每页显示x行,查看第y页,写出逻辑及SQL格式示例。
回答:从 x * y - y 开始显示最多 y行。select * from t limit x * y - y, y
虽然 x y - y = (x - 1) y,但是这样化简后的逻辑不好解读。
以上是 Mysql中通过Limit分页、获取页码、索引不一致问题 的全部内容, 来源链接: utcz.com/p/944555.html