多个表数据无法进行合并或者进行合并后无法分页的情况下进行手动分页

 逻辑就是:根据索引数和每个表的总个数去查询,最主要的是计算每个表的实际索引

首先是根据前端传过来的pageNum和pageSize可以计算出逻辑索引,接着就是根据逻辑索引计算出实际索引的值

首先从第二个表开始,能看到一些规律,就是:实际索引=逻辑索引-(前边的所有表的所有条数(不包含自身的表)),如下表所示

表的条数逻辑索引实际索引实际索引
400
11
22
33
3404-4
515-4
626-4
6707-7
818-7
92
103
114
125
1130

但是其中会有一些特殊情况,就是逻辑索引小于表的条数的情况,比如我要查询第2页的数据,每页3个数据,那么它的逻辑索引就是3;

它查询的结果应该是第一个表的最后一个,以及第一个表的前两个数据

第一个表查完后,需要对逻辑索引进行重新计算,则逻辑索引-表的总条数则就是下一个表的实际索引;

但是目前的情况是3-4=-1,所以则是不对的,可以进行修正,就是在逻辑索引小于总条数的时候进行加一进行补正,为了更符合逻辑,在最后进行判断,如果逻辑索引小于0的情况下,则将逻辑索引修正为0;

主要逻辑代码如下:

        import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
        //    pageSize 每页个数,   pageNum 第几页     
        // 开始索引
		long[] fromIndex = new long[] { (long) pageSize };
		// 剩余个数
		long[] surplusSize = new long[] { pageSize * pageNum - pageSize };
        tableList.forEach(tableName -> {
			if (surplusSize[0] > 0) {
                //进行分页查询,需要注意的是这里使用的是索引和个数,也就是limit offset
				Page<Object> dbPageList = dbservice.selectDataByTableName(fromIndex[0], surplusSize[0],tableName);
                 //这个就是要查出来的数据,将数据保存到结果集中
				List<Object> list = data.getRecords();
				surplusSize[0] -= list.size();
				//获取本表的总条数
				long totalThis = data.getTotal();
				//如果索引大于总条数,则直接相减
				if(fromIndex[0]>=totalThis) {
				fromIndex[0]-=totalThis;
				}else {
				fromIndex[0]-=(totalThis-1);
				}
				if(fromIndex[0]<0) {
				fromIndex[0] = 0;
				}
			}
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[1.7.38] 修复了所有示例。兼容1.7之后的版本。 优化了 Memcached支持。将 libmemcached 的内存分配器改成了易语言统一申请内存的方式。 修复了URI解析过程的一个逻辑陷阱。兼容中文等情况的URI二次解析可能出现的问题。 修复了XML解析等情况下得到的文本内容超出预计范围的问题。 修复了 模板编辑器 的若干问题。 1. 标签[正常输出]为空的情况 2. 包含文件列为空的情况 修复了 通过后缀名获取文件列的一些场景下,后缀名包含“.”无法得到文件列情况。 [1.7.37] 服务器响应对象加入了标准反馈信息的支持(API)。如果您希望把您的视图做为远程调用函数,强烈建议使用这组方法来写出反馈结果。未来E2EE也会提供更加完善的远程调用机制,也会将此反馈模型做为标准协议提供更多功能的支持。 响应.写出结果() 响应.写出成功() 响应.写出失败() [网站客户端] 修复了设置HTTP请求头后再次执行请求奔溃的问题。 修复了针对JSON和JS的自动编码转换无效的问题(神6、物联科技)。 HTTP中返回的协议头里的Content-Type中,网站客户端只转换了 txt/ 开头的MIME类型,JSON和JS的MIME是以 application 开头的,特地加入了针对这种情况的支持。 [存取键值] 优化了 合并到() 方法。结果将以 合并到 左边的键值为主,强制覆盖 目标 键值中所有主键名称相同的主键和添加不存在的主键内容。 加入了 置为空值() 方法。可设置主键对应的内容为 空 值。 [存取列] 加入了 置为空值() 方法。可设置指定位置的内容为 空 值。 [1.7.36] 修复了设置Session的ID某些场景下无效的问题(用户首次系统自动产生SessionID时无法再次手动设置等情况)。允许同一次请求执行多次Session的ID设置,只使用最后一次的设置。 [数据库分页] 修复了查询到分页实际的分页尺寸永远为10条的问题。为啥没有人告诉我这个问题!!!(感谢 左边的石头) [通用缓存对象] 在取键值和列数据之前,加入了对象清空操作。避免取到脏数据。 [WebSocket服务器] 加入了 取客户地址 方法。可以获取客户的IP地址。 [1.7.35] [网页内容解析器] 加入了 取下级文本/取下级内部文本 方法,可对选择结果进行二次筛选。 对应的示例[717]做了更新。 [网站客户端] 修复了 某些特殊环境下GET不受控制得不到HTTP响应头的内容(不知道是不是盗版引起)。 渲染() 方法加入了列的立即值输出。 例如: 列名为“名称组”,值为 ["a", "b", "c", 1, 2, 3] 则页面上可以使用 {{#名称组}} {{名称组}}  <= 直接使用列的变量名即可直接输出变量的值 {{/名称组}} [存取键值] 加入了 子列添加() 命令。可以对 键值 中的列值,进行 添加值 的操作。 [1.7.34] 修复了URL处理中路径包含中文和特殊符号等可能无法正确定位文件的问题。 存取列 加入了 排序() 方法。具体查看[009 基础对象测试]下的“列排序”示例。可通过列内容进行多种形式的排序。 存取键值 加入了 子列排序() 方法。作用等同于 列.排序()。 WebSocket客户端 加入了 置请求头() 方法。可以设置连接到服务器之后提交给服务器的HTTP头内容。 升级到最新版的易语言支持库开发SDK。 [1.7.33] 修复了 URL 解码时遇到的长度极值问题。之前的算法超过127位长度无法获取参数数据。 [1.7.32] 修复了URLEncoded类型的单提交时解码的问题。 优化了内部流程中URL解码部分的逻辑。 [1.7.31] [ADODB数据库连接池] 加入了 测试连接 方法。可以使用此方法测试指定数据库是否能够连接成功。 [存取键值/存取列] JSON处理 修复了某些特殊文本(全角文本或字符)加载失败的问题。 [请求对象] 修复了 取参数()/取所有参数() 中包含 http:// 等关键字的参数解析失败的问题。 重构了URI解析算法。兼容性更好,效率更高。(实测平均每秒能够处理2000万次请求路径) [数据库] 屏蔽了ADO查询到分页数据为空时,输出的错误信息内容。 [1.7.29] 改进了 静态编译 机制。 * 无论是静态编译EXE还是DLL,都能正确释放和调用原始库(因为是伪静态,机制等同于独立编译),不需要手动拷贝e2ee.fne到运行目录。 * 优化了原始库释放和调用流程,只有在临时目录无法使用且不存在原始库的情况下,才会释放原始库到运行目录。 修复了 文件列 功能可能引起的奔溃问题(第三只眼)。 * 网站打包加入后,通用获

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值