参考原文

tp5 分表

https://www.cnblogs.com/panziwen/p/12667863.html

分表数据分页查询

https://blog.csdn.net/tdcqfyl/article/details/82466959

根据以上两篇大佬的文章,tp5 分表,并不难

1,这里采用的是mysql单独建一张“tb_article”表来获取自增ID

CREATE TABLE `tb_article` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`stub` char(1) COLLATE utf8_bin NOT NULL DEFAULT '',PRIMARY KEY (`id`),UNIQUE KEY `stub` (`stub`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

2,分表设置$rule分了3个表,建表tb_article_1,tb_article_2,tb_article_3,里面字段要一致,用来存放内容

CREATE TABLE `tb_article_1` (`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '文章id',`user_id` INT(11) NOT NULL COMMENT '作者id',`add_time` INT(10) DEFAULT NULL COMMENT '时间',`typeid` INT(1) DEFAULT NULL COMMENT '文章栏目 1财经 2娱乐 3体育',`title` varchar(155) NOT NULL COMMENT '文章标题',`content` text NOT NULL COMMENT '文章内容',PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='文章表1';

3,新建模型

<?php
namespace app\index\model;
use think\Model;

class Article extends Model
{
    protected $table = 'tb_article';
    private function getRule(){
        return [
            'type' => 'mod', // 分表方式
            'num'  => 3     // 分表数量
        ];
    }    //获取插入ID,根据ID来取模分表
    public function getLastId(){
        $data['stub']='a';
        return $this->insertGetId($data, true);
    }
 
    public function saveData($data, $id){
        return $this->partition(['id' => $id], "id", $this->getRule())->insert($data);
    }
    
    public function getArticleById($where, $field = "*", $id){
        return $this->partition(['id' => $id], "id", $this->getRule())->where($where)->field($field)->select();
    }
}

4,新建控制器

<?php
namespace app\index\controller;use think\Controller;
use app\index\model\Article as ArticleModel;

class Article extends Controller
{
    //执行添加分表数据
    public function articleAdd(){
        $Article = new ArticleModel();
        $id = $Article->getLastId();
        $data = [
            'id' => $id,
            'user_id' => 10,
            'add_time' => time(),
            'typeid' => 3,
            'title' => '这里是新闻标题',
            'content' => '这里是新闻内容',
        ];
        if($Article->saveData($data,$id)){        

$this->success('文章添加成功!');

}
    }

//根据id查询分表数据
    public function getArticle(){
        $id = input('id');
        if($id){
            $Article = new ArticleModel();
            $news = $Article->getArticleById(['id'=>$id],'*',$id);
            return json($news);
        }
    }

//删除分表数据,原理和查询相同,直接根据id执行删除就行
}

通过已上几个步骤,就能实现tp5的分表数据添加和简单的查询。

tp5 的分表数据分页查询上面

文章大佬也说明了。根据说明执行就好.也就是两个步骤:1,先去获取数据的id    2,根据获取的id直接获取数据

//新建控制器查询方法
public function getList(){$Article = new subModel();
//1,  先去获取相关数据的主键id                    表名     主键id  要获取的字段  分表数量 条件$news = $Article->buildPartitionSql('car_article','id',$fields='',$num=3,$where='');
//2,  根据获取的主键id获取数据                        表名        主键id  id值   分表数量$newlist = $Article->buildPartitionListSql('car_article','id',$news,$num=3);var_dump($newlist);  //输出的就是我们需要的数据}

//新建模型方法

/*** 构造获取总记录数及主键ID的sql子查询语句* @param $table 主表名称* @param $idKey 主键id字段名称* @param string $fields 其它字段名称,多个字段用英文逗号分隔* @param int $num 子表数量* @param string $where 查询条件* @return array*/
function buildPartitionSql($table,$idKey,$fields='',$num=3,$where='') {$offset=0;        //分页数据,跟普通分页一样,直接传参就好$rows=9;          //分页数据,跟普通分页一样,直接传参就好$countTable = [];$listTable = [];$fieldList = [$idKey];if ($fields) {$fieldList = array_merge($fieldList,explode(',',$fields));$fieldList = array_unique($fieldList);}$fieldStr = implode(',',$fieldList);for ($i = 0; $i < $num; $i++) {$countTable[] = sprintf('SELECT %s FROM %s_%s where 1=1 %s', $idKey, $table, ($i + 1), $where);$listTable[] = sprintf('SELECT %s FROM %s_%s where 1=1 %s', $fieldStr,$table, ($i + 1), $where);}$countTable = '( ' . implode(" UNION ", $countTable) . ') AS ' . $table;$listTable = '( ' . implode(" UNION ", $listTable) . ') AS ' . $table;$tables = ['countSql' => $countTable, 'listSql' => $listTable];//这里返回的是两个sql语句,咱们简单点直接执行好,返回的就是数据的主键idreturn   Db::query("select * from". $tables['listSql']. " limit ".$offset.",".$rows);//return $tables;
}
/*** 构造获取指定id对应记录的sql子查询语句* @param $table 主表名称* @param $idKey 指定的id字段名称* @param $idValues 指定的id字段值* @param int $num 子表数量* @return string*/
function buildPartitionListSql($table,$idKey,$idValues,$num=1) {$idValues=array_column($idValues,'id');$sql = '';$ids = is_array($idValues) ? implode(',',$idValues) : $idValues;if ($ids) {$listTable = [];for ($i = 0; $i < $num; $i++) {$listTable[] = sprintf('SELECT * FROM %s_%s where %s in (%s)', $table, ($i + 1), $idKey, $ids);}$sql = '( ' . implode(" UNION ", $listTable) . ') AS ' . $table;}
//这里返回的是获取数据的失sql语句,简单点,直接执行就好,返回的就是我们需要的数据return   Db::query("select * from". $sql." order by id");}

tp5 分表+ 分页查询相关推荐

  1. mysql分库分表分页查询语句_MySQL分库分表分库后的查询(8th)

    前言 这边我们以使用python程序要展示一下再分库分表后,我们需要如何对数据库进行操作. python操作数据库 我们这边还是沿用之前的那5中:场景1:购买者下订单#!/usr/bin/env py ...

  2. mysql分片库分页查询_Mysql分库分表

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  3. MySQL 跨库分页/ 分表分页/ 跨库分页,为什么这么难?

    来源:https://www.cnblogs.com/yjmyzz/p/12149737.html 当业务数据达到一定量级(比如:mysql单表记录量>1千万)后,通常会考虑"分库分表 ...

  4. MySQL 跨库分页/ 分表分页,为什么这么难?

    以下内容来自公众号逆锋起笔,关注每日干货及时送达 来源:https://www.cnblogs.com/yjmyzz/p/12149737.html 当业务数据达到一定量级(比如:mysql单表记录量 ...

  5. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解

    sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...

  6. mysql数据库分表及查询

    垂直分表: 其实没啥好讲,就是 主键+常用列 放在原表中,再讲 主键+一些不常用列 放在另外的表中. 这样一个数据页就可以存放更多数据. 但是缺点也明显,可能会增加join 或 union之类的操作. ...

  7. MyBatis-Plus 初步使用心得-连表分页查询的实现

    MyBatis-plus 是基于mybatis的增强工具,是一款稳定强大的工具. 配置安装参考:https://mp.baomidou.com/guide/install.html#release 经 ...

  8. MyBatis_Plus联表分页查询

    MyBatis_Plus联表分页查询 当我们需要关联表格分页查询时,MyBatis_plus封装的单表方法已经满足不了我们的需求了,那么我们需要进行联表分页查询 假设我们需要的 SQL 语句如下: S ...

  9. mysql 分表 条件查询_mysql分表+查询

    最近面试,问到关与mysql数据库的分表一些问题,如设计一个千万级别的会员数据库,当时想到了分表,但是当问到如何跟据username查询到用户的信息时,这时,有点卡住了,所以为了让自已重新认识分表,而 ...

最新文章

  1. (各种均衡算法在MIMO中的应用对比试验)最小均方误差(MMSE)原理推导以及在MIMO系统中对性能的改善。
  2. python语言中如何使用注释
  3. 2021.4.7 美团买菜后端开发实习生(二面)(含总结)(已oc)
  4. Matlab中与复数有关的函数abs()、angle()
  5. 三次元风景照秒变宫崎骏动画,还能把石原里美吉卜力化,AnimeGAN已开源
  6. 计算机视野仪检测青光眼的操作,计算机视野仪检测青光眼的操作及体会
  7. 当学术论文开始标题党「x is All You Need」
  8. CSS样式表书写位置
  9. poj2186【利用强连通分量】
  10. Nginx 项目部署和配置
  11. Java 分布式服务重复提交解决方案 Redis
  12. 17 CoCos Creator-Node Tree 层级管理器
  13. (孔乙己茴香豆的的“茴”字有几种写法)三栏布局两边固定中间自适应
  14. java最新2019面试题
  15. 海恩法则和费曼学习法
  16. python斗地主出牌算法_python模拟斗地主发牌
  17. 【常用代码03】去除a标签下划线
  18. 一个机器人,主要由哪几部分组成?
  19. Jmeter基本使用与常见性能瓶颈
  20. 关于mysql国庆头三天近一周的数据查询题目

热门文章

  1. 研究人员发布 VMware vRealize Log RCE 漏洞,立即打补丁
  2. mysql 索引类型以及使用场景
  3. OpenSearch 可以轻松摄取、搜索、可视化和分析数据
  4. layui 下拉列表框获取值
  5. Adaptive Autosar 整体架构理解
  6. 干货分享!为你详细解答软考中级科目
  7. 第六周总结(运维基础网络部分)
  8. 【Figma学习】操作工具及其使用一
  9. Allegro快捷键(env)位置和快捷键设置
  10. python中for循环求和_python使用隐式循环快速求和的实现示例