mysql数据库分表查询(基于laravel5.2)

ThinkPHP与Laravel双框架开发儿童成长记录平台实践 在Web开发领域,多框架协同开发正成为解决复杂业务场景的主流方案。以PHP生态为例,ThinkPHP以其轻量级路由著称,而Laravel则擅长后台管理系统构建。通过Redis实现会话共享,开发者可以充分发挥各框架优势,显著提升系统性能。这种架构特别适合需要兼顾高并发接口和复杂业务逻辑的应用,如儿童成长记录平台。该平台整合了微信小程序生态,运用虚拟滚动技术实现流畅时间轴浏览,并采用AES-256加密保障隐私数据安全。典型应用场景还包括家庭协作记录、成长数据分析等,其中ThinkPHP处理前端API,Larav 阅读详情
最近因为需要统计大量的分表数据,传统操作非常麻烦,而且数据不容易掌握和维护,在这里总结一套方法。
原理:先将所有分表满足的结果查询出来,用 union all 将所有结果集形成一张表,最后操作这张‘表’。

基于laravel封装的类:

<?php
namespace App\Traits\Model;

use Carbon\Carbon;
use DB;

Trait UnionTableTrait
{
    /*
    * protected $splitTable = 'cdb_honey_log'; 原始表
    * protected $splitTableNameRule = '_Yn'; 分表名称规则
    * protected $splitTableMode = 'month'; 分表方式 year, month, day
    * const CREATED_AT; 数据的添加时间字段,最好用回laravel自带的
    * protected $dateFormat = 'U' 时间戳
    */

    public function __construct()
    {
        $this->table = $this->splitTable . Carbon::now()->format($this->splitTableNameRule);
    }

    public function setUnionAllTable($start = null, $end = null, $colums = '*', $where = '1')
    {


        // 开始日期,和日期有关的,都建议用内置的carbon处理,非常好用,而且简洁
        $start = is_numeric($start) ? Carbon::createFromTimestamp($start) : Carbon::parse($start);
        // 结束日期
        $end = is_numeric($end) ? Carbon::createFromTimestamp($end) : Carbon::parse($end);


        // 循环规则
        switch ($this->splitTableMode) {
            case 'year':
                $loopFormat = 'Y';
                $loopIncrement = 'addYear';
                $startOf = 'startOfYear';
                break;
            case 'month':
                $loopFormat = 'Y-m';
                $loopIncrement = 'addMonth';
                $startOf = 'startOfMonth';
                break;
            case 'day':
                $loopFormat = 'Y-m-d';
                $loopIncrement = 'addDay';
                $startOf = 'startOfDay';
                break;
        }

        $dateFormat = $this->dateFormat ? $this->dateFormat : 'Y-m-d H:i:s';
        $betweenDate = [$start->format($dateFormat), $end->format($dateFormat)];
        // 判断是否需要联合查询
        /*
        if ($start->format($loopFormat) == $end->format($loopFormat))

            return $this->setTable("{$this->splitTable}{$start->format($this->splitTableNameRule)}")
                ->selectRaw($colums)
                ->whereBetween(self::CREATED_AT, $betweenDate)
                ->whereRaw($where);
                */

        // 查询集合
        $queries = collect();
        // 循环比较,添加每一张表的查询
        for ($i = $start->copy()->$startOf(); $i->format($loopFormat) <= $end->format($loopFormat); $i->$loopIncrement()) {
           // dd($betweenDate);
            $queries->push(
                DB::table("{$this->splitTable}{$i->format($this->splitTableNameRule)}")
                    // 建议都用select查询字段,SQL尽可能的优化性能
                    ->selectRaw($colums)
                    ->whereBetween(self::CREATED_AT, $betweenDate)
                    ->whereRaw($where)
            );
        }

        // 出列一张表作为union的开始
        $unionQuery = $queries->shift();

        // 循环剩下的表添加union
        $queries->each(function ($item, $key) use ($unionQuery) {
            $unionQuery->unionAll($item);
        });
        return $this->setTable($this->splitTable)
            ->from(DB::raw("({$unionQuery->toSql()}) as {$this->splitTable}"))
            // 合并查询条件
            ->mergeBindings($unionQuery);
    }
}

分表的表名:a_user_call_2017_04 , 字段有:id 、target_uid 、channel_time

//分表的模型代码:
<?php
namespace App\Models;

use App\Traits\Model\UnionTableTrait;//引入上面的类

class UserCall extends BaseModel
{

    use UnionTableTrait;
    protected $connection = 'mysql';
    protected $splitTable = 'a_user_call'; 
    protected $splitTableNameRule = '_Y_m';   
    protected $splitTableMode = 'month'; 
    const CREATED_AT = 'channel_time';      // 分表依据的字段
    protected $dateFormat = 'U';

}
// 这个模型就具备连表的功能
例子:
//控制器中的代码

se Illuminate\Pagination\Paginator;
use DB;
use App\Models\UserCall;

// 查询分表的条件
$where1 = " channel_time>={$startTime} AND
            channel_time<{$endTime} AND
            chat_type={$chatType}
            ";
//查询字段
$select ="  target_uid,b.nickname,
            SUM(*) AS total_consume,
            COUNT(*) AS total_call ";

$lists1 = with(new UserCall)->setUnionAllTable($startTime, $endTime, ['*'], $where1)   // 这里查找分表的约束条件和字段,所满足的结果联合成一张表
            ->select(DB::raw($select)) //这里可以重新查找字段,注:selectRaw()方法会返回所有表字段
            ->leftJoin('b_beauty as b ','target_uid','=','b.id') //左联表
            ->whereRaw($where)     // 这里的条件不可再填分表的字段条件
            ->groupBy('target_uid')//分组
            ->paginate(15);        //分页
Win10/Win11系统下冒险岛V128单机版一键搭建教程(含MySQL配置避坑指南) 本文提供Win10/Win11系统下冒险岛V128单机版一键搭建的详细教程,涵盖服务端部署、MySQL配置优化及常见问题解决方案。通过本指南,玩家可轻松实现单机版冒险岛的一键启动,重温经典游戏体验,同时避免常见的技术陷阱。 阅读详情

相关推荐

RT-Thread NANO V4.1.1 在Cortex-M0上移植踩坑记:解决内存分配宏导致的线程创建失败

本文详细记录了RT-Thread NANO V4.1.1在Cortex-M0平台移植过程中遇到的内存分配宏配置问题,导致线程创建失败的解决方案。通过分析内存管理算法宏定义,将RT_USING_SMALL_MEM替换为RT_USING_SMALL_MEM_AS_HEAP,成功解决了线程创建问题,为开发者提供了实用的移植经验。

weixin_29189373的博客 307

MySQL 分表查询

分表是一种数据库分割技术,用于将大表拆分成多个小表,以提高数据库的性能和可管理性。在MySQL中,可以使用多种方法进行分表,例如基于范围、哈希或列表等。下面将详细介绍MySQL如何分表以及分表后如何进行数据查询。

不定时分享最优质的网络技术与教程,满满的干货。 1272

海上AI导航系统:技术架构与行业应用解析

计算机视觉与强化学习技术在海上导航系统中的应用正逐步改变传统航运业。通过多模态传感器融合技术,现代AI导航系统能够实现高精度的物体识别与实时路径规划,有效解决能见度依赖、决策延迟等核心痛点。以Orca AI的SeaPod系统为例,其结合了NVIDIA GeForce RTX 4070的边缘计算能力与多光谱协同识别技术,在恶劣环境下仍能保持稳定性能。这类系统不仅提升了航行安全性,还通过优化航线显著降低燃油消耗,在东京湾、马六甲海峡等繁忙水域展现出巨大价值。随着毫米波雷达融合方案的测试推进,未来海上导航将突破极

weixin_33597080的博客 355

Laravel分表联合查询

Laravel分表联合查询

柚子味西瓜的博客 816

北京联通IPTV组播实战:OpenWRT软路由配置全解析

本文详细解析了在北京联通IPTV环境下,利用OpenWRT软路由和udpxy工具实现组播转单播的实战配置。内容涵盖网络接口设置、防火墙规则、udpxy安装配置、直播源M3U文件处理以及全平台播放指南,帮助用户无需机顶盒即可在家庭局域网内任何设备上流畅观看电视直播。

weixin_29313547的博客 1413

OFDR解调全同弱反射光纤阵列

全同弱反射光纤光栅阵列是在一根光纤上密集刻写波长相同的WFBG,由于每个光栅的反射都比较弱,可实现一根光纤上复用成千上万个光栅,阵列上每个光栅栅区长度相同,相邻光栅之间栅距相同,呈周期性分布。2、获取测量信号:对弱栅阵列加载状态下,使用OFDR系统再次获取弱栅时域曲线,为测量信号。(这里需要注意的是对弱栅阵列加载后,不能使弱栅中心波长漂移到激光器波长扫描范围之外,若超出范围则OFDR技术不能获取弱栅反射信号,因此在选择弱栅阵列波长时尽量让其中心波长在激光器波长扫描范围中间,确保温度/应变测量范围。

m0_69386663的博客 1958

laravel分表查询

honey_log表,这个是重点,因为它是分表的,现在我们要封装一个union表的方法,让这个model自动把涉及的分表作为一张表赋予model查询 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use DB; class HoneyLog extends Model { /*传入查询的开始...

渡目成书 2858

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 385

mysql批量查询orm_laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析

本文实例讲述了laravel框架数据库操作、查询构建器、Eloquent ORM操作。分享给大家供大家参考,具体如下:1、连接数据库laravel连接数据库的配置文件位于config/database.php中,在其中connection字段中包含laravel所支持的数据库的配置信息,可以看到其中有主机、端口、数据库、用户名、密码等信息:'mysql' => ['driver' =>...

weixin_26712075的博客 409

深度解析与实战:长短时记忆网络(LSTM)在股票走势预测中的应用(基于Python + PyTorch)

本文全面探讨了LSTM在股票价格预测中的应用,从理论基础到实践操作。文章首先强调了股票市场预测的重要性,并介绍了LSTM网络结构及其在处理时间序列数据中的优势。接着,详细说明了数据预处理的关键步骤,包括数据收集、清洗、特征选择和归一化。文章还讨论了LSTM模型的构建、训练和评估,并提供了Python及PyTorch的实操案例。最后,总结了LSTM在股票预测的成果,并提出了未来研究的方向,如模型优化和特征工程,旨在帮助读者掌握LSTM在股票价格预测中的应用,并探索提升模型性能的方法。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2105

【软件测试】- 公有云、私有云、混合云简介以及如何在公有云与私有云上分别搭建测试环境

公有云、私有云以及混合云是目前云计算领域的三种主要模式。它们之间的区别主要在于部署方式、数据访问和管理控制的不同。在阿里云或腾讯云上使用 Kubernetes 和 Docker 搭建测试环境可以提供高度的可伸缩性和灵活性。这样的环境非常适合于需要在多种配置和条件下进行测试的复杂应用。通过云服务提供的工具和服务,可以轻松管理和监控整个测试过程。在云服务上搭建测试环境涉及选择合适的云提供商、配置云资源、安装和设置所需软件等步骤。### 1. 选择云服务提供商。

weixin_46453070的博客 2343

数据库分表及分页查询策略

并不是的,在一些对顺序、精度要求不严格的场景下,还是可以用的。所以在Proxy形态的分库分表中间件里,分页查询一多,就容易把中间件的内存耗尽,引发OOM,又或是CPU 100%。返回的结果是5,7,8,9,11,其中7在第一次查询里的偏移量是2,所以5的偏移量是1。比如说第一次查询的时候。这种方案并没有彻底解决分库分表查询中的分页问题,但是控制了偏移量,极大的减少了网络通信的消耗和磁盘扫描的消耗。在开发的时候先用SQL在不同的表上执行一下,看看同样的WHERE条件下各自返回了多少数据,就可以推断出来了。

疯狂的星光的专栏 1423

请尽可能地详细说明一个VLA项目的立项训练到落地的全流程

一个机器人VLA项目的全流程是一个复杂的系统工程,它深度融合了机器人学 (Robotics)计算机视觉 (CV)和自然语言处理 (NLP)。其核心挑战在于高质量数据的获取和从仿真到现实的有效迁移。与纯粹的软件AI项目相比,它增加了硬件、物理交互和安全性的维度,但其最终能让AI走出虚拟世界、在物理世界中产生实际价值,这也是其巨大的魅力所在。

具身机器人和通用AI 303

Laravel 实现 Mysql 用户表分表及查询

Laravel 实现 Mysql 用户表分表及查询,用户数据分表

以技术为核心,不变可应万变 2588

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Laravel框架中数据库分表时Model使用方法

前言: 0、最近在使用laravel框架做MySQL分表的时候经过实践和踩坑,总结了以下3中可行的分表方法,亲测可用。 1、本人公司做的是SaaS系统,以店铺为维度。店铺id(shop_id) 命名规则为: shop+6位随机数字字母+4位数字 。 示例:shopHqlTPT3482 、shopk9nj5m3714。 2、最近在做一个CRM系统,用户表 t_user表,由于数据量较大,于是决定对店铺id(shop_id) 取模 拆分成20个表 ,表名分别是t_user_0,t_user_1,t_user_2

wenai1292的博客 2224

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

mysql年月分表_【mysql】根据年月分表,相关查询问题

1.例如一个表名y_capture_2018_01,数据表名是根据年月来动态生成的(y_capture_2018_02);2.每个表里面都有自增主键id,还有个created_at(where条件)字段;3.比如我现在要查询2017-09-16到2018-01-02里面的数据符合条件的数据(先要找到表,然后查询,还要分页,还要效率高),这里面可能包含查全表;4.这个好像也不太适合用laravel模...

weixin_28858229的博客 982

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

mysql uuid 分表_PHP框架Laravel中使用UUID实现数据分表操作示例

本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作。分享给大家供大家参考,具体如下:UUIDUUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。说的简单点,它就是通过一个规则(如:业务标识号+年月日+当日自增数字格式化)生成的一个具有唯一性的辨识资讯。用于关联我们的一些额数据和资讯。实例之前在做一个项目的时候用到这个东西,现在我就用Laravel框架写一...

weixin_31290291的博客 248

php+vue+mysql+Laravel的公务员信息查询系统nodejs-计算机毕业设计

在这一背景下,开发了一个基于PHP的公务员信息查询系统,该系统采用PHP、think PHP、MySQL以及爬虫技术,专注于提供准确及时的公务员招聘信息及相关服务。公务员信息查询系统包括广泛的用户和管理员功能,如用户注册、登录、信息收藏、个人中心、招聘信息查询与筛选、推荐系统及公告论坛等。管理员端则包含用户管理、系统设置、爬虫任务调度、数据可视化看板及内容管理等功能。

QQ511008285的博客 1340

农业IoT数据洪流应对方案(基于PHP+MySQL的存储压缩与分表实践)

应对农业传感器PHP数据的存储优化难题,本文提供基于PHP+MySQL的高效解决方案,涵盖数据压缩、分表策略与实时入库优化,适用于大规模农业IoT场景。显著降低存储成本并提升写入性能,值得收藏。

LiteTrans的博客 875

MySql数据库分表分区实践

1. 背景 —— 公司物联网项目 海量设备通过物联网服务接入云端,设备每30s上报一次自身数据(以下称为动态数据)。 物联网服务将设备上报的数据转发给数据处理网关,由数据入库网关执行批量入库操作插入数据库。 项目大致技术架构如下图: 2. 问题 接入的设备数量较大时,上报的动态数据数据量过大,导致单表查询过慢。 假设有1万台设备,每台设备每30秒上报一次动态数据,那每分钟就会产生2万条数据,每天...

weixin_34034261的博客 516

ThinkPHP与Laravel双框架网约车系统开发实践

现代Web开发中,多框架协同开发是应对复杂业务场景的常见架构方案。以PHP生态为例,ThinkPHP以其轻量高效著称,而Laravel则提供更完善的企业级功能支持。通过Redis消息队列实现跨框架数据同步,开发者可以充分发挥各框架优势。在高并发场景下,这种架构需要配合Swoole协程、Elasticsearch空间索引等技术实现实时派单和动态计价等核心功能。网约车系统作为典型的高并发实时系统,其技术方案特别强调容错性和柔性降级机制,这对电商、物流等需要处理突发流量的互联网应用具有重要参考价值。

weixin_34234829的博客 346

Mycat的简单使用(三)【分库分表】

分享一套阿里大牛整理的前端资料给大家,点击前端校招面试题精编解析大全即可免费下载-> phone_id bigint(20) DEFAULT NULL COMMENT ‘主键’,-> type varchar(10) DEFAULT NULL COMMENT ‘通话类型’,-> duration bigint(20) DEFAULT NULL COMMENT ‘通话时长(秒)’,

2301_78416672的博客 878

Thinkphp_Laravel框架的大学生体测数据管理系统

该系统基于ThinkPHP或Laravel框架开发,旨在高效管理大学生体质健康测试数据,实现数据录入、存储、分析与可视化功能。系统采用B/S架构,前端结合HTML5、CSS3及JavaScript技术,后端依托PHP框架的高效开发能力,数据库选用MySQL或PostgreSQL,确保数据安全性与可扩展性。系统核心功能包括学生信息管理、体测项目数据录入、成绩统计与分析、报表生成及权限分级管理。管理员可批量导入学生信息,教师按班级或个体录入体测成绩(如跑步、跳远、肺活量等),系统自动计算总分并生成等级评定。

2501_91488339的博客 689

thinkphp通过模型查询mysql_tp5中使用模型进行查询

classArticleextendsModel{publicfunctiontags(){//用户HASONE档案关联u_id附表中的IDid主表中的IDreturn$this->hasMany('tags','u_id','id');}publicfunctiontag(){return...

weixin_28338005的博客 401

基于Thinkphp和Laravel电商平台网上商城---

本系统后端采用 PHP 语言搭配Thinkphp或者 Laravel 框架,PHP 语法简洁且功能强大,Laravel 或者Thinkphp框架能优化代码结构、提升开发效率,高效实现系统核心逻辑与数据库交互。前端运用 Vue 框架,其组件化开发与响应式设计,可打造流畅交互界面。MySQL 数据库稳定可靠,能安全存储海量文档数据,整体而言,这些成熟技术相互配合,能顺利完成系统开发。开发软件: hbuiderx,vscode、Adobe Dreamweaver等。

QQ242219979的博客 609

Laravel + Livewire构建Docker2SaaS:技术栈选择与快速变现优势指南

Docker2SaaS是一款创新的开源工具,让你能在10分钟内将Docker镜像转换为功能完整的SaaS网站。这个基于Laravel和Livewire的解决方案为开发者提供了快速变现云应用的能力,无需从零开始构建复杂的订阅管理系统。通过Docker2SaaS,你可以轻松创建多租户SaaS平台,自动管理用户订阅、云主机创建和支付集成,让技术变现变得更加简单高效。🚀 ## 为什么选择Laravel

gitblog_00674的博客 645
上一篇: 获取用户的真实ip
下一篇: 关于MySQL外连接查询的NULL
小Z笔记
博客等级 码龄9年 11粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值