PHP使用,按时间水平分表,跨月多表条件查询数据分页显示

1.创建测试表并添加一些对应数据

sh_user_visit_202405 uid,create_time
sh_user_visit_202406 uid,create_time
sh_user_visit_202407 uid,create_time

2.格式化表

//获取表数组
public function getListByCross($table_prefix, $start_date, $end_date){if($end_date > date("Y-m-d H:i:s", time())){$end_date = date("Y-m-d H:i:s", time());}$startY = date('Y',strtotime($start_date)); //开始时间所在年份$startm = date('m',strtotime($start_date));  //开始时间的开始月份$endY = date('Y',strtotime($end_date));  //结束时间所在年份$endm = date('m',strtotime($end_date));  //结束时间的开始月份$ym_arr = [];//获取跨年月数组if($startY==$endY){ //不跨年for($i=$startm;$i<=$endm;$i++){$ym_arr[] = $startY.str_pad($i,2,'0',STR_PAD_LEFT);}}else{ //跨年跨月$dostartY = $startY;do{if($startY==$dostartY){for($i=$startm;$i<=12;$i++){$ym_arr[] = $startY.str_pad($i,2,'0',STR_PAD_LEFT);}}elseif($startY < $endY){for($i=0;$i<=12;$i++){$ym_arr[] = $startY.str_pad($i,2,'0',STR_PAD_LEFT);}}else{for($i=1;$i<=$endm;$i++){$ym_arr[] = $startY.str_pad($i,2,'0',STR_PAD_LEFT);}}$startY++;}while($startY<=$endY);}$tables = [];foreach($ym_arr as $val){$tables[] = $table_prefix . $val;}return $tables;
}

3.调用

public function test(){$params = $this->request->param();if(!isset($params['start_date']) && !isset($params['end_date'])){return $this->success("ok",[]);}// 分页设置$page = $params['page'] ?? 1; // 当前页码$limit = $params['limit'] ?? 15; // 每页显示的记录数$offset = ($page - 1) * $limit; // 计算偏移量// 初始化相关变量$table_prefix = "sh_user_visit_";$start_date = $params['start_date']; //查询开始时间$end_date = $params['end_date']; //查询结束时间$start = $table_prefix.date('Ym',strtotime($start_date));$isTable = Db::query("SHOW TABLES LIKE '{$start}'");if (!$isTable) {return $this->error("日期错误");}//获取表数组$tables = $this->getListByCross($table_prefix, $start_date, $end_date);//条件查询$where_str = "`create_time` BETWEEN '".$start_date."' AND '".$end_date."'";if(isset($params['uid']) && $params['uid'] != ''){$where_str .= 'AND uid = '. $params['uid'];}$union_query = '';foreach ($tables as $table) {if ($union_query != "") {$union_query .= " UNION ALL ";}$union_query .= "SELECT * FROM {$table} WHERE ". $where_str;}// 获取总记录数$total_query = "SELECT COUNT(*) AS total FROM ({$union_query}) AS unioned_tables";$result = Db::query($total_query);$count = $result[0]['total'];// 分页查询$paged_query = "{$union_query} LIMIT $limit OFFSET $offset";$result = Db::query($paged_query);$data = ['page' => $page,'count' => $count,'data' => $result];return $this->success("ok",$data);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nginx+lua 实现URL重定向(根据传入的参数条件)

程序版本说明 程序版本URLnginx1.27.0https://nginx.org/download/nginx-1.27.0.tar.gzngx_devel_kitv0.3.3https://github.com/simpl/ngx_devel_kit/archive/v0.3.3.tar.gzluajitv2.1https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20240626.tar.gzlua-nginx-m…

Qt项目:基于Qt实现的网络聊天室---TCP服务器和token验证

文章目录 TCP服务器设计客户端TCP管理者ChatServerAsioIOServicePoolSession层LogicSystem总结 token验证模块完善protoStatusServer验证token客户端处理登陆回包用户管理登陆界面 本篇完成的模块是TCP服务器的设计和token验证 TCP服务器设计 客户端TCP管理者 因为聊天服务要…

游戏服务端设计:任务系统

任务系统的设计 导读 在众多的游戏系统当中,任务系统可谓是缺一不可。它是策划对游戏周期的一种抽象拆分。每个阶段的任务设定和游戏的进度密切相关,可以视其为带有目标的玩法提示和指引。通过完成任务,来了解游戏背景、熟悉玩法,或者是达到某种目标(等级提升/道具获取/条…

C#开发翻译较好的API

用于翻译服务的网站或API&#xff0c;尤其适合C#开发&#xff0c;以下是一些知名的选项&#xff1a; Google Cloud Translation API Google 提供的翻译服务非常强大&#xff0c;支持多种语言&#xff0c;而且有很好的文档和社区支持。您可以使用C# SDK来调用此API。 Microsoft …

LabVIEW心电信号自动测试系统

开发了一种基于LabVIEW的心电信号自动测试系统&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现对心电信号的实时采集、分析和自动化测试。系统包括心电信号采集模块、信号处理模块和自动化测试模块&#xff0c;能够高效、准确地完成心电信号的测量与分析。 硬件系统…

计算机视觉之Vision Transformer图像分类

Vision Transformer&#xff08;ViT&#xff09;简介 自注意结构模型的发展&#xff0c;特别是Transformer模型的出现&#xff0c;极大推动了自然语言处理模型的发展。Transformers的计算效率和可扩展性使其能够训练具有超过100B参数的规模空前的模型。ViT是自然语言处理和计算…

STM32+HC-05蓝牙模块学习与使用(内附资料)

引言 随着物联网技术的快速发展&#xff0c;短距离无线通信技术变得日益重要。蓝牙作为一种低功耗、低成本的无线通信技术&#xff0c;在嵌入式系统中得到了广泛应用。本文将详细介绍如何使用STM32微控制器与HC-05蓝牙模块进行通信&#xff0c;实现数据的无线传输。 硬件准备…

prompt第一讲-prompt科普

文章目录 大语言模型输入要求中英翻译助手直接抛出问题描述问题描述&#xff08;详细&#xff09;问题描述案例问题描述案例上下文问题为什么要加入上下文 prompt总结prompt心得 大语言模型输入要求 大语言模型本质上就是一个NLP语言模型&#xff0c;语言模型其实就是接受一堆…

ubuntu服务器安装labelimg报错记录

文章目录 报错提示查看报错原因安装报错 报错提示 按照步骤安装完labelimg后&#xff0c;在终端输入labelImg后&#xff0c;报错&#xff1a; (labelimg) rootinteractive59753:~# labelImg ………………Got keys from plugin meta data ("xcb") QFactoryLoader::Q…

日常学习--20240713

1、字节流转字符流时&#xff0c;除了使用字节流实例作为参数&#xff0c;还需要什么参数&#xff1f; 还需要使用字符编码作为参数&#xff0c;保证即使在不同平台上也是使用相同的字符编码&#xff08;否则会使用平台默认的编码&#xff0c;不同平台默认编码可能不一样&…

hutool处理excel时候空指针小记

如图所示&#xff0c;右侧的会识别不到 参考解决方案&#xff1a; /***Description: 填补空缺位置为null/空串*Param: hutool读取的list*return: 无*Author: y*date: 2024/7/13*/public static void formatHutoolExcelArr(List<List<Object>> list) {if (CollUtil…

企业网络实验dhcp-snooping、ip source check,防非法dhcp服务器、自动获取ip(虚拟机充当DHCP服务器)、禁手动修改IP

文章目录 需求相关配置互通性配置配置vmware虚拟机&#xff08;dhcp&#xff09;分配IP服务配置dhcp relay&#xff08;dhcp中继&#xff09;配置dhcp-snooping&#xff08;防非法dhcp服务器&#xff09;配置ip source check&#xff08;禁手动修改IP&#xff09; DHCP中继&…

Android ListView

ListView ListView是以列表的形式展示具体内容的控件&#xff0c;ListView能够根据数据的长度自适应显示&#xff0c;如手机通讯录、短消息列表等都可以使用ListView实现。如图1所示是两个ListView&#xff0c;上半部分是数组形式的ListView&#xff0c;下半部分是简单列表Lis…

《Linux系统编程篇》认识在linux上的文件 ——基础篇

前言 Linux系统编程的文件操作如同掌握了一把魔法钥匙&#xff0c;打开了无尽可能性的大门。在这个世界中&#xff0c;你需要了解文件描述符、文件权限、文件路径等基础知识&#xff0c;就像探险家需要了解地图和指南针一样。而了解这些基础知识&#xff0c;就像学会了魔法咒语…

【C++】指针学习 知识点总结+代码记录

一.示例代码知识点总结 1. 基本指针操作 指针声明和初始化&#xff1a;int* ptr_a a; 表示声明了一个指向整型的指针&#xff0c;并初始化为指向数组a的首地址。引用和指针的区别&#xff1a;int& i2 i; 声明了一个整型引用&#xff0c;绑定到变量i上&#xff0c;而int…

k3s配置docker容器/dev/shm

在使用K3s和Docker容器时&#xff0c;如果你发现容器的 /dev/shm 默认大小是64MB&#xff0c;并且需要扩大它的大小&#xff0c;可以通过以下几种方法实现。 方法1&#xff1a;使用 Docker 的 --shm-size 选项 如果你直接使用 Docker 运行容器&#xff0c;可以通过 --shm-siz…

jenkins系列-07.轻易级jpom安装

jpom是一个容器化服务管理工具&#xff1a;在线构建&#xff0c;自动部署&#xff0c;日常运维, 比jenkins轻量多了。 本篇介绍mac m1安装jpom: #下载&#xff1a;https://jpom.top/pages/all-downloads/ 解压&#xff1a;/Users/jelex/Documents/work/jpom-2.10.40 启动前修…

git 分支介绍

在Git版本控制系统中&#xff0c;分支&#xff08;Branch&#xff09;是一种非常强大的功能&#xff0c;它允许开发者在不影响主代码库&#xff08;如master分支&#xff09;的情况下进行开发或修复工作。你提到的五种分支类型是在Gitflow工作流&#xff08;Gitflow Workflow&a…

css基础(1)

CSS CCS Syntax CSS 规则由选择器和声明块组成。 CSS选择器 CSS选择器用于查找想要设置样式的HTML元素 一般选择器分为五类 Simple selectors (select elements based on name, id, class) 简单选择器&#xff08;根据名称、id、类选择元素&#xff09; //页面上的所有 …

Git配置笔记

文章目录 Git配置一、Git配置文件1.1 配置文件位置1.2 参考 二、换行符相关2.1 背景2.2 相关配置2.3 推荐配置2.4 参考资料 Git配置 一、Git配置文件 1.1 配置文件位置 Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位…