首页 > 数据库 >php+sql后台实现从主表迁出至副表(数据超万条)

php+sql后台实现从主表迁出至副表(数据超万条)

时间:2024-06-22 09:54:45浏览次数:3  
标签:totalPage php 至副表 页数 response 导入 主表 数据 page

上万条甚至上百万数据进行迁出做备份或者进行不妨碍原系统数据的操作,现在很多企业都会用到,目前就需要将上百万条数据进行迁出到副表保存并操作,直接再后台写一个按钮进行操作,既方便操作也不会很慢。毕竟是客户需要,不能每次迁出都要客户去数据库操作,操作的不好那数据危险度挺高的。

1、分页查询数据库主表数据

2、分页写入数据库副表

两句话很简单,关键在于那个“分页”式操作,那这就开始我这上百万条的数据迁出作业 by user 悦悦 https://www.cnblogs.com/nuanai

前端肯定需要一个页面来显示这个操作按钮,html的页面布局不做多余解释(使用的框架是fastadmin)页面显示了运行到的每一页数据和运行结束后总页数

1 <p>当前页码:<span id="currentPage"></span></p>
2 <p>总页数:<span id="totalPage"></span></p>
3 
4 <button type="button" id="qrBtntwo">迁出数据</button>

再来就是JS逻辑问题,html给这个按钮起了一个名字,那就对这个名字进行单击事件的触发  by user 悦悦 https://www.cnblogs.com/nuanai

需要注意的是我这边调用导入数据方法,使用的Controller调用方法,因为我使用的是fastadmin框架,正常根据自己所使用的的框架进行方法的调用就可以。

1 $(document).on("click", "#qrBtntwo", function () {
2     // 初始化页码和总页数
3     $('#currentPage').text(1);
4     $('#totalPage').text('正在导入...');
5 
6     // 开始导入数据,默认是第一页
7     Controller.importProewm(1);
8 });

数据导入方法的编写,用到了ajax方法,也不过多解释,正常的结构传值,只要url路径写对即可(如果需要判定时间性操作,可以追加上时间点的判断和传值data),注意需要用到get传值当前页数page,因为下面返回需要继续调用

 1 importProewm:function(page){
 2     $.ajax({
 3         url: 'bwqr/Workflowhis/importproewm?page=' + page,
 4         type: 'POST',
 5         dataType: 'json',
 6         success: function(res) {20         },
21         error: function(xhr, status, error) {
22             // 显示错误信息
23             alert('数据导入失败:' + error);
24         }
25     });
26 },

对于控制器的内容,就是每次读取数据库数据,按照分页进行读取后写入到副表中,然后将“页数”和"总页数"结果返回到JS中,里面使用到了事务的开启,如果出现错误可以很好的判断是哪一页出现了错误  by user 悦悦 https://www.cnblogs.com/nuanai

 1 public function importproewm(){
 2     
 3     // 每页显示的数据量
 4     $pageSize = 10;    
 5     // 获取当前页码
 6     $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
 7     // 查询原始表的数据总数
 8     $query = Db::name('procedure');
 9     $total = $query->count();
10     // 计算总页数
11     $totalPage = ceil($total / $pageSize);
12     // 开启事务
13     Db::startTrans();
14     try {
15         // 查询当前页的数据并插入到目标表
16         $data = $query->where(["deletetime"=>null,"status"=>'normal'])->limit($pageSize)->page($page)->select();
17         Db::name('procedure_his')->insertAll($data, true);//相同id的跳过
18 
19         // 构建返回的JSON数据
20         $responseData = [
21             'currentPage' => $page,
22             'totalPage'   => $totalPage
23         ];
24         // 提交事务
25         Db::commit();
26     } catch (\Exception $e) {
27         // 回滚事务
28         Db::rollback();
29         $this->error($e->getMessage());
30         // 返回错误信息
31         header('HTTP/1.1 500 Internal Server Error');
32         echo '数据导入失败:' . $e->getMessage();
33     }
34     
35     $this->success('', null, $responseData);
36 }

JS循环调用importProewm方法即可:如果按照页数进行循环,就需要传入每一页的页数值,因此自己调用自己的时,需要传入页数值+1才可以实现页数循环;里面也进行了页数判断,如果没有了下一页,就会输出完成提示

 1 var response = res.data;
 2 console.log(response);
 3 // 更新当前页码和总页数
 4 $('#currentPage').text(response.currentPage);
 5 $('#totalPage').text(response.totalPage);
 6 
 7 // 判断是否还有下一页数据
 8 if (response.currentPage < response.totalPage) {
 9      // 继续导入下一页数据
10     Controller.importProewm(response.currentPage + 1); 
11 } else {
12      // 导入完成
13     $('#totalPage').text(response.totalPage + ' (导入完成)');
14 }

至此,从主表迁出到副表功能就结束了,总结其实就是合理对自己的调用。  by user 悦悦 https://www.cnblogs.com/nuanai

 如果大家有更简单的主副表迁移 ,可以一起沟通。

标签:totalPage,php,至副表,页数,response,导入,主表,数据,page
From: https://www.cnblogs.com/nuanai/p/18260744

相关文章

  • Ubuntu 24.04 编译 PHP 8.0
    PKG_CONFIG_PATH=/usr/local/openssl111w/lib/pkgconfigOPENSSL_CONF=/usr/local/openssl111w/ssl/openssl.cnf./configure--prefix=/usr/local/php80--enable-fpm--with-fpm-user=www-data--with-fpm-group=www-data--enable-phpdbg--disable-short-tags--wit......
  • 计算机毕业设计项目推荐,33709基于协同过滤的旅游推荐系统的设计与实现(开题答辩+程序定
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个旅游推荐系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析......
  • Docker + Visual Studio Code IDE实现PHP Xdebug调试
    目录一、前期准备二、配置文件1.VisualStudioCodeIDE配置2、配置docker中php的xdebug.ini三、开始调试参考文档一、前期准备1、安装VSCode软件;2、在VSCode中安装PHPDebug插件;3、安装好Docker4、在容器中php中安装安装Xdebug扩展根据这个链接操作即可:X......
  • PHP 程序员转 Go 语言的经历分享
    大家好,我是码农先森。之前有朋友让我分享从PHP转Go的经历,这次它来了。我主要从模仿、进阶、应用这三个方面来描述转Go的经历及心得。模仿是良好的开端,进阶是艰难的成长,应用是认知的提升。希望我的经历对大家能有所启发。模仿著名艺术家毕加索说过「模仿是人类一切......
  • CentOS7系统搭建web环境 php&nginx&pgsql
    环境:VMware、CentOS-7-x86_64-DVD-2009.iso、nginx-1.26.1、php-7.2.0、postgresql-12php最好安装对应php项目所需版本,否则会出现不兼容问题。一、VMware安装CentOS7操作系统下载LinuxCentos7映像:https://mirrors.aliyun.com/centos/7/isos/x86_64/?spm=a2c6h.25603864.0.......
  • 免构建安装 nginx php-fpm 快速运行 php 项目
    文档说明:只记录关键地方;发布时间:2024-06-20需求:linux、macos环境下,免构建安装nginxphp-fpm快速运行php项目运行环境:linux、macos状态:已完成实现原理:静态编译nginx、php-fpm下载nginx、php-fpm脚本和运行时gitclonehttps://gitee.com/jingjingxy......
  • ThinkPHP 的老漏洞仍然被攻击者钟情
    研究人员发现安全领域出现了令人不安的趋势:攻击者不仅对新披露的漏洞十分感兴趣,对已知的漏洞也丝毫不放过,尽管有些漏洞已经存在了好些年头,攻击者仍然能够通过老漏洞成功完成攻击。典型的例子就是ThinkPHP远程代码执行漏洞CVE-2018-20062和CVE-2019-9082,距今已有六年的时......
  • PHP提取form表单内容组成URL
    示例代码:functionChinaPayUrl($html){//创建一个新的DOMDocument实例$dom=new\DOMDocument();//加载HTML内容@$dom->loadHTML($html);//创建一个DOMXPath实例$xpath=new\DOMXPath($dom);//获取action......
  • PHP Linux安装扩展(编译安装)
    0x01下载包并解压http://pecl.php.net/package/mailparsetar-xzfmailparse.tgzcdmailparse0x02配置/www/server/php/74/bin/phpize./configure--with-php-config=/www/server/php/74/bin/php-config0x03编译并安装makesudomakeinstall0x04激活编辑php.......
  • 关于几种语言(c#,php,python,javascript)字符串的gzip压缩与解压的整理
    背景介绍因为一直在处理restfulAPI,给移动端提供的数据需要考虑流量问题,优先考虑就是压缩现有的字符串,然后再考虑业务逻辑方面的减少流量。鉴于找这些资料也花了不少时间,所以整理了这篇文章,留作纪念。参考网址PHP与C#的压缩与解压http://www.oschina.net/question/2265205_181......