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

回到顶部