<?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();
这时候数据库中已经有将近100+万数据。下游希望要的数据并不是数据库的格式,格式特定样式的。这时候就需要关联上好多个表进行同时查询。我最开始我是使用orm模式进行处理导对应字段,导出的数据(我做了Redis缓存),整个导出过程用了半天。我用PHPadmin联合查询导出数据的时候用了不到3分钟;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
思考
jion与orm用哪个用orm为什么慢用orm是否也可以很快先说今天的主题
假设现在有一个天津市学生表(有100+万数据)student table
字段 | 类型 | 备注 |
---|---|---|
ID | int | |
student_no | string | 学生编号 |
name | string | 学生姓名 |
areaID | int | 所属区域的ID |
gradeID | int | 年级ID |
SchoolID | int | 学校ID |
area table (15条数据)
字段 | 类型 | 备注 |
---|---|---|
ID | int | |
name | string | 区域名称 |
greate table (12条数据)
字段 | 类型 | 备注 |
---|---|---|
ID | int | |
name | string | 区域名称 |
School table (100+条数据)
字段 | 类型 | 备注 |
---|---|---|
ID | int | |
name | string | 校园名称 |
要求导出所有内容到csv文件中 格式要求:学生编号,学生姓名,所属区域,所属年级,所属学校
总结以上是内存溢出为你收集整理的php导出百万数据到csv全部内容,希望文章能够帮你解决php导出百万数据到csv所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)