首页 > 编程语言 >laravel php 50W数据导出excel 分批分页导出

laravel php 50W数据导出excel 分批分页导出

时间:2023-12-14 10:44:18浏览次数:39  
标签:laravel db excel request strtotime header 导出 date d1

文章目录

需求

导出50W左右的数据导excel表

问题

  1. 使用phpexcel等插件,碰到数据量大很慢,可能能花半个小时以上
  2. 数据量大查询慢
  3. 内存不足
  4. 执行超时

解决

  1. 使用原生csv导出
  2. 设置脚本超时和内存,进行加大内存,不限制超时时间
  3. 进行分页查询
 public function bp_out(Request $request){
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
        ini_set("memory_limit", "2048M");
        set_time_limit(0);
        if ($request->has('date')){
            $d1 =  strtotime(date("Y-m-d",strtotime($request->date." day")));
            $d2 =  strtotime(date("Y-m-d",strtotime(($request->date+1)." day")));
            $filename ="电池数据_".date("Y-m-d",strtotime($request->date." day")).".csv";
//            return $filename;
        }
        if ($request->has('d1')){
            $d1 = strtotime($request->d1);
            $d2 = strtotime($request->d2);

            $filename = "电池数据_".$request->d1."->".$request->d2.".csv";
        }
        $count = Logbp::whereBetween('client_time',[$d1,$d2])->count();
        $limit = 10000;/限制查询
        $page =ceil($count/$limit);//页数
        header('Content-Description: File Transfer');
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="'. $filename .'"');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        $fp = fopen('php://output', 'a');//打开output流
        ob_clean();
        $title =['车辆识别码','主板SN','车身常电连接状态','是否有效','电池电压V','发送时间','接收时间'];
        mb_convert_variables('GBK', 'UTF-8', $title);
        fputcsv($fp, $title);
        for ($i=0;$i<$page;$i++){
            $offset = $i*$limit;
            $dbs = DB::connection('mysql_online')->select("SELECT a.hwid,b.vin,a.charge,a.valid,a.voltage,from_unixtime(a.client_time,'%Y-%m-%d %H:%i:%S') AS start ,from_unixtime(a.server_time,'%Y-%m-%d %H:%i:%S') as end FROM tb_logs_bp a LEFT JOIN tb_equipment b on a.hwid = b.hwid WHERE a.client_time > {$d1} AND a.client_time<{$d2} limit {$limit} offset {$offset}" );
            foreach ($dbs as $db){
                $db->charge= $this->checkcharge($db->charge);
                $db->valid = $this->checkvalid($db->valid);
                $db->voltage  = $db->voltage/10;
                $t = substr($db->vin,0,1);
                if (!$t){
                    $db->vin ="`". $db->vin;
                }
                $data=[$db->vin,$db->hwid,$db->charge,$db->valid,$db->voltage,$db->start,$db->end];
                mb_convert_variables('GBK', 'UTF-8', $data);
                fputcsv($fp, $data);
            }
            unset($dbs);
        }
        ob_flush();
        flush();
        fclose($fp);
        exit();

    }

版权声明:本文为weixin_43674113原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_43674113/article/details/102977134

标签:laravel,db,excel,request,strtotime,header,导出,date,d1
From: https://www.cnblogs.com/hefeng2014/p/17900686.html

相关文章

  • Excel 公式SWITCH函数你用过吗?多种查找函数介绍
    我们公司的项目上的模板使用了Excel的Switch函数,今天我使用的时候,发现报错,无法使用。环境说明我使用的是Windows10专业版,Office2016报错信息在Excel中的报错如下: 单元格的公式如下:=F8*_xlfn.SWITCH(H8,"高",1.5,"中",1,"低",0.5)*(100-I8)/100 查找问题从网上找了......
  • excel_to_mysql过程(Excel数据转换到MySQL数据库当中)
    准备数据流图:在输入输出里面找到对应的类型:数据流图建好了接下来怎么将excel表格数据抽取到mysql当中去???####编辑excel输入:手机号改为数字类型,就没有.0了,主要是类型问题@@@@@@@@@@@@@@@@@@@@@@@建立mysqll连接,进行编辑表输出最后看一下原始数据:22个单元格,21条数据,和以上数据相符!!......
  • Unity3D 如何读取策划给定的Excel表格详解
    前言Unity3D是一款非常流行的游戏开发引擎,它可以帮助开发者快速构建游戏并进行测试和发布。在游戏开发过程中,策划经常会提供一些Excel表格,这些表格包含了游戏中的各种数据,如角色属性、技能效果等等。那么,如何在Unity3D中读取这些Excel表格呢?本文将详细介绍Unity3D如何读取策划给......
  • 使用file-saver导出文件
    使用file-saver导出文件:https://blog.csdn.net/guizi0809/article/details/119421502?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170246311516800192248321%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170246311516800192248......
  • 如何使用java生成 Excel 股票图?
    要使用Java生成Excel股票图,可以使用POI库来操作Excel文件,使用JFreeChart库来生成股票图。首先,确保已经添加了以下依赖库:ApachePOIJFreeChartJCommon下面是一个简单的示例代码,用于生成一个包含股票图的Excel文件:importorg.apache.poi.ss.usermodel.*;importorg.apache.poi.xssf.......
  • openGauss学习笔记-156 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-156openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出单个数据库-导出数据库156.1导出数据库openGauss支持使用gs_dump工具导出某个数据库级的内容,包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息:导出......
  • openGauss学习笔记-157 openGauss 数据库运维-备份与恢复-导出数据-使用gs_dump和gs_d
    openGauss学习笔记-157openGauss数据库运维-备份与恢复-导出数据-使用gs_dump和gs_dumpall命令导出数据-导出单个数据库-导出模式157.1导出模式openGauss目前支持使用gs_dump工具导出模式级的内容,包含模式的数据和定义。用户可通过灵活的自定义方式导出模式内容,不仅支持选定一......
  • C# 操作Excel
     1.使用Aspose.Cells合并单元格下载Aspose包,可以去Nuget网站下载NuGetGallery|Packagesmatchingaspose 也可以使用vs安装Nuget包 语法:publicvoidMerge(intfirstRow,intfirstColumn,inttotalRows,inttotalColumns);实现代码:usingAspose.Cells;us......
  • YuQueDocFetch——批量导出语雀文档
    嗨嗨师傅们好呀~前段时间不是语雀崩了两次,那会可让我慌麻了,看来重要的文档还是要本地存一份呀。正好最近也有需要把语雀上的一些文档保存到本地,但是一个个导出太麻烦了,于是这个工具就诞生了。工具地址:https://github.com/hhuang00/YuQueDocFetch简单介绍YuQueDocFetch是一个......
  • excel 速成
     【文本】:查找、替换、截取、拼接数字:加、减、乘、除、保留小数位数【日期】:日期加减、时分秒加减【逻辑】:if、and、or、not【异常】:对计算过程中产生的错误进行处理,如:1/0,N/A【分组聚合】:无条件聚合,有条件聚合、最大值、最小值 1.if(and/or/not)2. iferror()3. text(......