java 分页ID显示问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 分页ID显示问题相关的知识,希望对你有一定的参考价值。
mysql做查询分页操作的时候select * from table limit 0,20
第二页select * from table limit 20,20
在JSP中table中 resultset展示查询结果
int i = 0
while(rs.next())
i++;
id:<%=i%>
这样每页ID都从1开始
想要第二页从21开始怎么写?
给你个建议吧
分页---------------------------------
1:假分页
一次将所有的数据从数据库中取出来,用户需要哪个显示哪个
2:真分页
用户需要哪条记录,就从数据库中取出哪条记录,给用户显示。
--------------------------------
分页四要素
1: 总记录数 dao层获取(查数据库得总条数)
2: 每页记录数 自己订
3: 总页数 通过总记录数和每页记录数求得
4: 当前页 这个值不是固定的,一开始我们只知道初始值是1
--------------------------------
select * from 表名 limit ?1 , ?2;
?1:要显示的记录数的索引值
?2:一共显示几条
分页公式:
select * from 表名 limit (当前页-1)*每页记录数,每页记录数
------------------------------------------------------
eg: 一共10条记录 每页显示3条 分4页
page1: 1--3 0,3 (1-1)*3,3
page2: 4--6 3,3 (2-1)*3,3
page3: 7--9 6,3 (3-1)*3,3
-------------------------------------------------------
单凭一个id,第二页当然从1开始了. 上面是我在培训机构的笔记,总之要分页,你得定义四个值, 有了这四个值,什么都能算出来. 不过我还是习惯在js里定义变量ajax分页.
追问嗯,这个我知道,总条目数,总页数 这些都有
但是在页面展示的时候第一列ID怎么弄
比如一共29条 2页 像我那么写第一页ID是1~20
第二页又从1开始 1~9了
我想第二页是21~29
你是在方法里定义的 i 变量吧,挪到方法外面 jsp页面里 全局变量
追问在JSP页面里用JAVA脚本写的
如果你翻页的代码是用form提交的,那在form里做个隐藏域 比如" /> 然后本页面再获取这个asd 注意判断一下 获取不着就给它默认值0
参考技术A 把i的值从后台存上来不就行了 参考技术B 分页用sql做,很快很简单滴!未解决mysql分页性能问题深究
大佬们请教一个Mysql问题:现在有一个数据分页的功能
【1】前提如下:
(1.1)数据量大概有2亿条左右
(1.2)2个查询条件,每页100条记录,不显示数据总量和总页数
(1.3)正常情况下都ok,因为每次就是 limit 100,又不显示数据总量和总页数
并且还使用了 id>上一次分页数据最大的ID 这种方法避免深度翻页的问题,效果比较理想,速度毫秒级
【2】SQL
select * from Log where filetype =‘文件类型‘ and observetime >= ‘开始时间‘ and observetime <= ‘结束时间‘ and id > 上页数据最大的id order by observetime desc LIMIT 100
id 为主键、递增,filetype 、observetime 都是正常的二级索引
【3】问题
问题前提:正常情况 between observetime 的命中行数非常大
(3.1)当所有条件正常,并查询结果集大于100的时候,limit 100正常,速度500ms
(3.2)当某一个条件值(比如filetype写个不存在的类型时)使得筛选结果集为空,则非常慢几十秒
(3.3)当筛选结果集不满足100时,则非常慢几十秒(比如按照时间+文件类型查询的结果只有1条记录,小于limit 100,也会很慢,几十秒都没结果 )
原理
如果符合条件的数据足够多,则limit100的过程就是,从符合条件的第一条数据开始往后查,当查够100条数据,则立刻返回。
如果符合条件的数据不够,则会从符合条件的第一条数据开始往后扫描,一条条的查,直到把整个表扫描完仍然不够100条,才会返回结果(不够100条)。
解决方案:
方案一:
查出满足条件的数据一共有多少条,按照条数处理,最后一个Limit的数量剩余满足条件的数量。
但是,如果查询条件没有索引,统计总共有多少条的将会是个慢查询。
方案二:
类似滑动窗口的方式,每次对id查询idStart+1000=idEnd范围内的符合条件的数据。凑够1000条的时候返回,但是业务实现就会更加复杂。
参考:
https://blog.csdn.net/u014440417/article/details/80352550
以上是关于java 分页ID显示问题的主要内容,如果未能解决你的问题,请参考以下文章