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

分表聚合助手类

下面是一个分表聚合助手类的推荐实现方式,你可以将其放在 app/model/TaskRecord.php 或单独新建一个 app/model/ShardingHelper.php 文件,适用于所有类似分表模型(如 TaskRecord、StarRecord)。


分表聚合助手(通用版)

namespace app\model;use support\Db;
use Illuminate\Support\Collection;class ShardingHelper
{/*** 获取所有分表表名* @param string $baseTableName 例如 'ss_task_records'* @param int $shardCount* @return array*/public static function getAllShardTables($baseTableName, $shardCount = 16){$tables = [];for ($i = 0; $i < $shardCount; $i++) {$tables[] = "{$baseTableName}_{$i}";}return $tables;}/*** 跨所有分表聚合查询* @param string $baseTableName* @param callable $queryCallback function($queryBuilder, $tableName)* @param int $shardCount* @return Collection*/public static function unionAll($baseTableName, callable $queryCallback, $shardCount = 16){$all = collect();foreach (self::getAllShardTables($baseTableName, $shardCount) as $table) {$query = Db::table($table);$result = $queryCallback($query, $table);if ($result instanceof \Illuminate\Support\Collection) {$all = $all->merge($result);} elseif (is_array($result)) {$all = $all->merge($result);}}return $all;}
}

使用示例

1. 查询所有分表中 user_id in [1,2,3] 的任务

use app\model\ShardingHelper;$userIds = [1,2,3];
$allRecords = ShardingHelper::unionAll('ss_task_records', function($query) use ($userIds) {return $query->whereIn('user_id', $userIds)->get();
});

2. 查询所有分表的任务总数

$total = ShardingHelper::unionAll('ss_task_records', function($query) {return $query->count();
})->sum();

3. StarRecord 跨分表查询

$allStars = ShardingHelper::unionAll('ss_star_records', function($query) {return $query->where('type', 'earn')->get();
});

说明

  • 你可以把 ShardingHelper 放在 app/model/ 目录,所有分表模型都能用。
  • 只需传入基础表名(如 ‘ss_task_records’),即可跨所有分表聚合。
  • 回调里用 $query 写任何你想要的查询,返回 Collection 或数组即可。
http://www.xdnf.cn/news/1144477.html

相关文章:

  • 常用的折叠展开过渡动画效果css
  • 20250718-5-Kubernetes 调度-Pod对象:重启策略+健康检查_笔记
  • Python数据类型探秘:解锁编程世界的魔法钥匙
  • JavaScript 的垃圾回收机制
  • Maven下载安装与idea配置
  • FLTK UI窗口关闭时延时卡顿问题全流程分析与优化实战
  • 探索 Vue 3.6 的新玩法:Vapor 模式开启性能新篇章
  • 帆软可视化图
  • Vue3 从 0 到 ∞:Composition API 的底层哲学、渲染管线与生态演进全景
  • JavaScript笔记
  • 【JS笔记】Java Script学习笔记
  • C#将【程序集引用-依赖关系】展示到NetronLight图表中
  • Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南
  • 设计模式五:桥模式(Bridge Pattern)
  • wedo牛-----第47节(免费分享图纸)
  • MBIST - Memory BIST会对memory进行清零吗?
  • 基于单片机的便携太阳能光伏系统研究
  • C语言—如何生成随机数+原理详细分析
  • 20250718-FDU-HDUOJ钉耙编程一
  • 初探:C语言FILE结构之文件描述符与缓冲区的实现原理
  • 更适合后端宝宝的前端三件套之HTML
  • CentOS7 内网服务器yum修改
  • 有好内容,如何做好知识变现?
  • 【Zephyr开发实践系列】08_NVS文件系统调试记录
  • GEV/POT/Markov/点过程/贝叶斯极值全解析;基于R语言的极值统计学
  • 【案例教程】基于现代R语言【Tidyverse、Tidymodel】的机器学习方法与案例分析实践技术应用
  • [AI8051U入门第五步]modbus_RTU主机
  • stack and queue 之牛刀小试
  • Excel批量生成SQL语句 Excel批量生成SQL脚本 Excel拼接sql
  • 大型市政污水处理厂“智变”记:天拓四方IOT平台让磁悬浮鼓风机“活”起来