<?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分钟;

思考

  1. jion与orm用哪个
  2. 用orm为什么慢
  3. 用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的更多相关文章

  1. Hive导出复杂数据到csv文件

    工作中经常遇到使用Hive导出数据到文本文件供数据分析时使用.Hive导出复杂数据到csv等文本文件时,有时会遇到以下几个问题: 导出的数据只有数据没有列名. 导出的数据比较复杂时,如字符串内包含一些 ...

  2. SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

  3. PHP导出大量数据到csv表

    对于做后台开发的码农来说,从excel导入数据到数据库亦或者是从数据库导出数据到excel都是很常见的操作.由于经常遇到这样的场景,也因为从数据库导出数据到表格所遇到的坑有很多,所以需要另辟途径来进行 ...

  4. Php导出百万数据的优化

    导出数据量很大的情况下,生成excel的内存需求非常庞大,服务器吃不消,这个时候考虑生成csv来解决问题,cvs读写性能比excel高.测试表student 数据(大家可以脚本插入300多万测数据.这 ...

  5. python提取百万数据到csv文件

    转自:http://www.2cto.com/kf/201311/258112.html 今天有需求,需要把系统所有用户注册的id和邮箱等信息导出来提供给他们,在mysql里面count了下,大概有3 ...

  6. java 导出百万数据到excel

    @RequestMapping("export") public void write(HttpServletRequest request,HttpServletResponse ...

  7. java 分页导出百万级数据到excel

    最近修改了一个导出员工培训课程的历史记录(一年数据),导出功能本来就有的,不过前台做了时间限制(只能选择一个月时间内的),还有一些必选条件, 导出的数据非常有局限性.心想:为什么要做出这么多条件限制呢 ...

  8. 【shell mysql 导出数据到csv脚本,完美解决乱码转义符等问题】-费元星

    #!/bin/bash#@author:feiyuanxing [既然笨到家,就要努力到家]#@date:2017-12-05#@E-Mail:feiyuanxing@gmail.com#@TARGE ...

  9. C#导出数据到CSV和EXCEL文件时数字文本被转义的解决方法

    今天写C#导出datagrid数据到csv格式文件的时候,发现不管怎么尝试,凡是单元格里面全是数字的单元格,在用Excel打开的时候,都被自动转义成数据格式.数据查看极其不方便.最后google了一下 ...

随机推荐

  1. fiddler---Fiddler查看get和post请求

    前几篇写了Fiddler的一些功能介绍,今天我们一起学习下如何通过fiddler查看get请求和post请求和get,post区别 get请求 1.启动fiddler,抓取安静博客地址 2.通过fid ...

  2. 01-路由跳转 安装less this.$router.replace(path) 解决vue/cli3.0语法报错问题

    2==解决vue2.0里面控制台包的一些语法错误. https://www.jianshu.com/p/5e0a1541418b 在build==>webpack.base.conf.j下注释掉 ...

  3. UML图示样例

  4. luoguP4343自动刷题机(二分标准题)

    https://www.luogu.org/problem/P4343 参考博客:https://www.luogu.org/blog/ofnoname/solution-p4343 这真是一语点醒梦 ...

  5. [C7] Andrew Ng - Sequence Models

    About this Course This course will teach you how to build models for natural language, audio, and ot ...

  6. 剑指Offer-17.树的子结构(C++/Java)

    题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 分析: 注意这道题是判断B是不是A的子结构,而不是子树,这一点要注意下,且空树不是任意一个树的子结构 ...

  7. Kafka为什么不支持读写分离得原因?-干货

    在 Kafka 中,出产者写入音讯.顾客读取音讯的操作都是与 leader 副本进行交互的,从 而结束的是一种主写主读的出产消费模型.数据库.Redis 等都具有主写主读的功用,与此同时还支撑主写从读 ...

  8. ESP8266 LUA脚本语言开发: 外设篇-串口

    https://nodemcu.readthedocs.io/en/master/modules/uart/ 串口发送数据 发送一个16进制到串口 uart.write(0, 0xaa) 注: 之所以 ...

  9. asp.net mvc 系统操作日志设计

    第一步.系统登录日志 通过signalr来管理用户的登录情况,并保存用户的登录记录. 第二步 通过mvc过滤器,来横切路由访问记录. 保存方式:通过httpclient异步请求webapi 数据通过m ...

  10. 动手学深度学习10- pytorch多层感知机从零实现

    多层感知机 定义模型的参数 定义激活函数 定义模型 定义损失函数 训练模型 小结 多层感知机 import torch import numpy as np import sys sys.path.a ...