三种数据库实现分页查询

MySQL数据库分页查询
limit 开始,多少条
第n页 开始 结束
1 0 9
2 10 19
n (n-1)*10 (n-1)*10-1

select * from student limit 第几个数据,页面大小
第0页 select * from student limit 0,10;
第1页 select * from student limit 10,10;
第n页 select * from student limit 10*n,10;

sqlServlet/oracle:从1开始计数;
第n页 开始 结束
1 1 10
2 11 20
n (n-1) n*10
select * from student where sno>=(n-1)10+1 and sno<=n10;—此种写法的前提:必须是ID连续,否则无法满足每页10条数据

select rownum,t.* from student t where rownum>=(n-1)10+1 and rownum<=n10 order by t.sno;----//创建一个伪列为rownum来满足连续的条件
1.如果根据sno排序则rownum会混乱
2.rownum只能查询<的数据不能查询>的数据
解决方案:分开使用->先只排序,再只查询rownum
先只排序:select s.* from student s order by sno asc;
将查询结果当成一个t表(select s.* from student s order by sno asc) t;
再进行查询rownum
select rownum,t.* from(select s.* from student s order by sno asc) t;
在分页查询select rownum,t.* from(select s.* from student s order by sno asc) t
where r>=(rownum-1)10+1 and <=rownum10 ; 此时还是不可以的,因为rownum是不能用>的。
解决办法为将rownum伪列变成普通的列即可,即在外面再套用一个select 就能把rownum变成普通列取名为r;
查询语句如下:
oracle的分页查询语句:
select * from
(
select rownum r, t.
from
(select s.* from student s order by sno asc) t
where rownum<=n*10;
)
where r>=(n-1)10+1 and <=n10 ;

SQLServlet分页: 3种分页
sqlservlet2003:用top排序不支持row_number
select top 页面大小 * from student where id not in
(select top (页数-1)*页面大小 id from student order by sno asc)存在弊端如果id值不连续不能保证每页数相等
sqlservlet2012之后支持:
offset fetch next only //与MySQL中的limit用法相同,从哪开始,页面大小

select * from student order by sno
offset (页数-1)* 页面大小 +1 fetch next 页面大小 rows only;

SQLServlet分页:sqlservlet2005后支持
row_number() over(字段) 要指定哪一列是row_number()
select * from
(
select row_number() over(sno order by sno asc) as r(伪列取名为r),* from student

where r<=n*10;

)
where r>=(n-1)10+1 and <=n10 ;

SQLServlet此种sql分页和oracle的区别
1.rownum ,row_number()
2.oracle需要排序(为了排序需要单独写一个子查询),但SQLServlet中可以省略该排序的子查询, 因为sqlServlet可以通过over直接排序。

分页实现:
5个变量 (属性)
1.数据总数 (查数据库,select count(*)…)
2.页面大小 (每页显示的数据条数) (用户自定义)
3.总页数 (程序自动计算)
总页数=100/20=数据总数/页面大小
总页数=103/20=数据总数/页面大小+1
总页数-数据总数%页面大小==0?数据总数/页面大小;数据总数/页面大小+1;

4.当前页(页码) (用户自定义)
5.当前页的对象集合(实体类集合):每页所显示的所有数据(10个人信息)
List (查数据库,分页sql)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在小程序的 JavaScript 代码中实现数据库的数据分页查询,可以使用云函数进行数据库查询,并通过参数控制分页。 以下是一个示例代码,演示如何在小程序中使用云函数实现数据库的数据分页查询: 1. 创建一个云函数,在其中进行数据库查询并返回分页数据。 ```javascript // 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const db = cloud.database() const collection = db.collection('collectionName') // 替换为实际的集合名称 const { page, pageSize } = event const skip = (page - 1) * pageSize // 查询数据并返回结果 const result = await collection.skip(skip).limit(pageSize).get() return result.data } ``` 2. 在小程序端调用云函数,并处理返回的分页数据。 ```javascript Page({ data: { page: 1, // 当前页数 pageSize: 10, // 每页显示的数据量 dataList: [], // 分页数据列表 }, // 加载更多数据 loadMoreData: function() { wx.cloud.callFunction({ name: 'getPagedData', // 替换为实际的云函数名称 data: { page: this.data.page + 1, // 请求下一页的数据 pageSize: this.data.pageSize, // 每页显示的数据量 }, success: (res) => { // 将获取到的数据添加到原有数据列表中 const newDataList = this.data.dataList.concat(res.result); this.setData({ dataList: newDataList, page: this.data.page + 1, }); }, }); }, }); ``` 这样,当用户触发加载更多数据的事件时,会调用云函数并获取下一页的数据,并将新数据添加到原有数据列表中实现分页显示效果。需要根据实际情况修改集合名称和云函数名称。同时,在小程序的云开发控制台中,需要创建一个名为 `getPagedData` 的云函数,并在其中引入数据库操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值