php导出百万数据到csv

php导出百万数据到csv,第1张

概述<?phpset_time_limit(0);//设置超时ini_set('memory_limit','100M');//设置最大使用的内存header("Content-type:text/csv");header("Content-Disposition:attachment;filename=".date('Ymd&#
<?PHP    set_time_limit(0);      // 设置超时    ini_set('memory_limit', '100M');       // 设置最大使用的内存        header("Content-type:text/csv");    header("Content-disposition:attachment;filename=" . date('Ymd'). '.csv');    header('Cache-Control:must-revalIDate,post-check=0,pre-check=0');    header('Expires:0');    header('Pragma:public');    $out = fopen('PHP://output', 'w');    $bom = chr(0xEF).chr(0xBB).chr(0xBF);     // 防止乱码    $func = function ($List){        $arr = [];        foreach ($List as $v){            $arr[$v['ID']] = $v['name']        }        return $arr;    }     // todo 注意我这里都是用SQL语句直接代替查询    $List = select * from area;    $area = $func($List);    $List = select * from greate;    $greate = $func($List);    $List = select * from School;    $School = $func($List);    ob_end_clean();    ob_implicit_flush(5);        fputcsv($out, [$bom . '学生编号','学生姓名','所属区域','所属年级','所属学校']);    // 上面整理好了对应关系    do{        $i = 0;        $List = select * from student where ID > $i order by ID asc limit 10000        if(!$List) break;        foreach($List as $v){            if($v['ID'] > $i) $i = $v['ID'];    // 这里可以不这样写,这些就自己优化吧            fputcsv($out, [                        $v['student_no'],$v['name'],                        $area[$v['areaID']],                        $greate[$v['gradeID']],                        $School[$v['SchoolID']],                    ]);        }    }while(true)        fclose($out);    exit();

https://github.com/wrack0001/note/blob/master/php/php%E5%AF%BC%E5%87%BA%E7%99%BE%E4%B8%87%E6%95%B0%E6%8D%AE%E5%88%B0csv.md

起因:有一次业务需求,需要导出数据库中的所有数据给接口下游,以便下游比对所有数据是否一致。

这时候数据库中已经有将近100+万数据。下游希望要的数据并不是数据库的格式,格式特定样式的。这时候就需要关联上好多个表进行同时查询。我最开始我是使用orm模式进行处理导对应字段,导出的数据(我做了Redis缓存),整个导出过程用了半天。我用PHPadmin联合查询导出数据的时候用了不到3分钟;

思考

jion与orm用哪个用orm为什么慢用orm是否也可以很快

先说今天的主题

假设现在有一个天津市学生表(有100+万数据)

student table

字段类型备注
IDint 
student_nostring学生编号
namestring学生姓名
areaIDint所属区域的ID
gradeIDint年级ID
SchoolIDint学校ID

area table (15条数据)

字段类型备注
IDint 
namestring区域名称

greate table (12条数据)

字段类型备注
IDint 
namestring区域名称

School table (100+条数据)

字段类型备注
IDint 
namestring校园名称

要求导出所有内容到csv文件中 格式要求:学生编号,学生姓名,所属区域,所属年级,所属学校

总结

以上是内存溢出为你收集整理的php导出百万数据到csv全部内容,希望文章能够帮你解决php导出百万数据到csv所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存