当前位置: 首页 > news >正文

PHP:实现两张无关联表数据的联合分页处理方案

前言

在现代软件开发中,高效地处理数据是至关重要的环节。尤其是在使用 PHP 进行开发时,常常会遇到各种复杂的数据处理需求。其中,实现两张无关联表数据的联合分页处理就是一个具有挑战性的任务。这种需求在很多实际应用场景中都可能出现,例如在管理系统中需要同时展示来自不同数据源的数据,并进行分页以便用户更好地浏览。本文将深入探讨如何使用 PHP 来实现两张无关联表数据的联合分页处理方案,为开发者提供实用的技术指导和解决方案。

解决方案

以下方法需借助 ThinkPHP(TP)框架来完成,并且该方法是为前端提供的接口,用于实现两张无关联表数据的联合分页处理。ThinkPHP 框架以其高效、便捷的开发特性,为开发者提供了强大的工具支持。通过这个接口,前端可以更加方便地获取经过处理后的分页数据,提升用户体验和系统的整体性能。

/* 分类和列表的数据需要合在分页,且先获取分类的数据 
$page 接口或者方法接收的当前获取页数
$limit 接口或者方法接收的每页条数
*/// 构建分类和列表的数据库查询对象 where查询条件可自定义
$type_db = Db::name('bucket_type')->where($where_type)->order('id','desc');
$bucket_db = Db::name('bucket')->where($where_bucket)->order('id','desc');$type_count = $type_db->count();  // 分类数据总条数
$bucket_count = $bucket_db->count();  // 列表数据总条数$count = $type_count + $bucket_count;  // 合并数据总条数
$last_page = ceil($count / $limit);  // 合并数据总条数
$current_page = $page;  // 当前获取第几页的数据// 初始化结果数组
$result = [];
$result['total'] = $count;
$result['last_page'] = $last_page;
$result['current_page'] = $current_page;
$result['data'] = [];$type_last_page = ceil($type_count / $limit);  // 分类总页数
$bucket_last_page = ceil($bucket_count / $limit);  // 列表总页数$result['type_last_page'] = $type_last_page;
$result['bucket_last_page'] = $bucket_last_page;if ($current_page <= $type_last_page) {// 若当前页小于等于分类总页数,获取分类列表// paginate为tp框架自带的分页$type_list = $type_db->paginate(['list_rows'=>$param['limit'],'page'=>$page])->toArray();$result['data'] = $type_list['data'];if (count($type_list['data']) < $limit) {// 若分类列表数据不足,计算还需要的数量$need_count = $limit - count($type_list['data']); // 还需要几条if ($bucket_last_page > 0) {// 获取相应数量的列表并合并到结果中$bucket_list = $bucket_db->paginate(['list_rows'=>$need_count,'page'=>1])->toArray();$result['data'] = array_merge($result['data'], $bucket_list['data']);}}
} else {// 若当前页大于分类总页数,计算所需的列表页$need_page = $current_page - $type_last_page;$need_del_count = 0;if ($type_last_page && $type_last_page < $current_page) {// 计算需要删除的数量$type_list = $type_db->paginate(['list_rows'=> $limit,'page'=> $type_last_page])->toArray();if (count($type_list['data']) < $limit) {$need_del_count = $limit - count($type_list['data']);}}if ($bucket_last_page > 0) {// 获取列表数据$bucket_list = $bucket_db->paginate(['list_rows'=> $limit,'page'=> $need_page])->toArray();if ($need_del_count > 0) {$need_bucket_list = $bucket_db->paginate(['list_rows'=> $limit,'page'=> $need_page + 1])->toArray();$bucket_list['data'] = array_slice($bucket_list['data'], $need_del_count);$need_bucket_list['data'] = array_slice($need_bucket_list['data'], 0, $need_del_count);$bucket_list['data'] = array_merge($bucket_list['data'], $need_bucket_list['data']);}$result['data'] = $bucket_list['data'];}
}
// $result为返回的结果

此方法为个人思路,若在使用过程中发现任何问题,欢迎随时反馈。我们可以共同探讨、相互学习,以实现共同进步和提升。如需转载请注明出处

相关文章:

PHP:实现两张无关联表数据的联合分页处理方案

前言 在现代软件开发中&#xff0c;高效地处理数据是至关重要的环节。尤其是在使用 PHP 进行开发时&#xff0c;常常会遇到各种复杂的数据处理需求。其中&#xff0c;实现两张无关联表数据的联合分页处理就是一个具有挑战性的任务。这种需求在很多实际应用场景中都可能出现&am…...

【单元测试】单元测试介绍

1 单元测试基础 1.单元测试&#xff1a;单元测试又称模块测试&#xff0c;属于白盒测试&#xff0c;是最小单位的测试。模块分为程序模块和功能模块。功能模块指实现了一个完整功能的模块&#xff08;单元&#xff09;&#xff0c;一个完整的程序单元具备输入、加工和输出三个…...

PyQt事件机制及其应用

一、实例前置 一个小闹钟应用 创建主窗口类 首先我们创建了一个名为AlarmClock的类&#xff0c;它继承自QMainWindow。这个类将包含我们的GUI组件和逻辑。 from Alarm_clock import Ui_MainWindowclass AlarmClock(QMainWindow):def __init__(self):super().__init__()# 初始化…...

厦门凯酷全科技有限公司抖音电商服务的卓越典范

在短视频和直播带货迅速崛起的时代&#xff0c;厦门凯酷全科技有限公司&#xff08;以下简称“凯酷全科技”&#xff09;以其专业的服务、创新的精神以及对市场的深刻理解&#xff0c;在抖音电商领域中脱颖而出&#xff0c;成为众多品牌商家信赖的选择。本文将深入探讨凯酷全科…...

vue3水波柱状图 ,实现

效果图 //引用页面 <div style"height: 60px;background-color: #fff;border-radius: 5px;width: 40px;"><WavePercentage:percentage"progress"primary-color"#ffcb7c"secondary-color"#ffcb7c"/></div>import Wa…...

如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制

如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制 如何在两台 PostgreSQL 服务器之间使用逻辑复制槽进行数据复制环境准备1. 配置主服务器&#xff08;Publisher&#xff09;1.1 修改 postgresql.conf1.2 修改 pg_hba.conf1.3 重启 PostgreSQL 服务1.4 创建逻辑复制…...

System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本

问题1&#xff1a;“/”应用程序中的服务器错误。 System.Data.OracleClient 需要 Oracle 客户端软件 version 8.1.7 或更高版本。 说明: 执行当前 Web 请求期间&#xff0c;出现未经处理的异常。请检查堆栈跟踪信息&#xff0c;以了解有关该错误以及代码中导致错误的出处的详细…...

【机器人】振动分析和控制工具之Bode图

Bode 图完整介绍 Bode 图由两个部分组成&#xff1a; 幅值图 (Magnitude Plot)&#xff1a;描述系统对不同频率输入信号的增益大小&#xff08;幅值响应&#xff09;。相位图 (Phase Plot)&#xff1a;描述系统输出信号相对于输入信号的相位差。 Bode 图的横轴是频率&#x…...

生成:安卓证书uniapp

地址&#xff1a; https://ask.dcloud.net.cn/article/35777 // 使用keytool -genkey命令生成证书&#xff1a; 官网&#xff1a; keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ----------------------------------…...

酒店/电影推荐系统里面如何应用深度学习如CNN?

【1】酒店推荐系统里面如何应用CNN&#xff1f;具体过程是什么 在酒店推荐系统中应用卷积神经网络&#xff08;CNN&#xff09;并不是一个常见的选择&#xff0c;因为 CNN 主要用于处理具有空间结构的数据&#xff0c;如图像、音频和某些类型的序列数据。然而&#xff0c;在某…...

【CSS in Depth 2 精译_069】11.3 利用 OKLCH 颜色值来处理 CSS 中的颜色问题(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 11.1.1 模式的建立11.1.2 还原设计稿 11.2 颜色的定义 11.2.1 色域与色彩空间11.2.2 CSS 颜色表示法 11.2.2.1 RGB…...

Redis篇-6--原理篇5--单线程模型

1、概述 Redis 采用单线程模型来处理客户端请求&#xff0c;这意味着在任意时刻只有一个命令被执行。这种设计简化了 Redis 的实现&#xff0c;并确保了高并发环境下的数据一致性。尽管 Redis 是单线程的&#xff0c;但它通过高效的内存管理和网络 I/O 操作&#xff0c;仍然能…...

Java版-图论-最小生成树-Prim算法

实现描述 如图&#xff1a; Prim算法的基本思想是从一个顶点开始&#xff0c;逐步构建最小生成树。具体步骤如下&#xff1a; 随机选取一个顶点作为起始点&#xff0c;并将其加入最小生成树的集合中。从该顶点出发&#xff0c;选择一条边连接到其他未被访问的顶点中的最小权…...

Python 基础学习(一)

一.基础语法 注释 Python中单行注释以 # 开头&#xff0c;如下&#xff1a; #!/usr/bin/python3# 第一个注释 print ("Hello, Python!") # 第二个注释多行注释可以用多个 # 号&#xff0c;还有 ‘’’ 和 “”"&#xff1a; #!/usr/bin/python3# 第一个注释…...

vue2使用rtsp视频流接入海康威视摄像头(纯前端)

一.获取海康威视rtsp视频流 海康威视官方的RTSP最新取流格式如下: rtsp://用户名:密码IP:554/Streaming/Channels/101 用户名和密码 IP就是登陆摄像头时候的IP(笔者这里IP是192.168.1.210) 所以笔者的rtsp流地址就是rtsp://用户名:密码192.168.1.210:554/Streaming/Channel…...

利用PHP和GD库实现图片拼接的方法

利用PHP和GD库实现图片拼接的方法主要涉及到加载图片资源、创建目标画布、将图片资源绘制到目标画布上&#xff0c;并最终输出或保存拼接后的图片。以下是实现图片拼接的基本步骤&#xff1a; 加载图片资源&#xff1a; 使用imagecreatefromjpeg()、imagecreatefrompng()或ima…...

自动驾驶领域常用的软件与工具

CarSim&#xff1a;专门针对车辆动力学的仿真软件&#xff0c;能够预测和仿真汽车整车的操纵稳定性、制动性、平顺性、动力性和经济性。CarMaker&#xff1a;德国IPG公司推出的动力学、ADAS和自动驾驶仿真软件&#xff0c;提供精准的车辆本体模型和闭环仿真系统。VTD (Virtual …...

uniapp-内部项目使用文档

uniapp-内部项目使用文档 目录 uniapp-内部项目使用文档阶段1自行实现内容&#xff1a;阶段1问题记录&#xff1a; 阶段2自行实现内容&#xff1a; 阶段3 APP项目介绍及规范阶段4 公共组件方法UseList 列表页面HooksListItem 列表项uni-load-more 列表加载更多组件CardTitle 列…...

ASP .NET Core 中的环境变量

在本文中&#xff0c;我们将通过组织一场小型音乐会&#xff08;当然是在代码中&#xff09;来了解 ASP .NET Core 中的环境变量。让我们从创建项目开始&#xff1a; dotnet new web --name Concert 并更新Program.cs&#xff1a; // replace this: app.MapGet("/"…...

学科竞赛管理系统

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 摘 要 随着国家教育体制的改革&#xff0c;全国各地举办的竞赛活动数目也是逐年增加&#xff0c;面对如此大的数目的竞赛信息&#xff0c;传统竞赛管理方式已经无法满足需求&#xff0c;为了提高效率&am…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...