mysql csv 导入 百万级_php导出百万级mysql数据到csv文件

导出

//controller代码

//注意超时

//如果导出时间过长,请调整nginx配置或者page_nums参数

//建议mysql版本 5.5,在mysql5.6中无效

//members表建立组合索引 create index v_type_id_index on xcx_members(v_type,id)

//v_type 为自定义字段,tinyint default 1,用来在子查询中触发组合索引

static function getData($total_page=1, $page_nums=10000)

{

for($i=0; $i

{

$start = $i * $page_nums;

//子查询分页

$sql = "SELECT mobile,realname,nickname,avatar FROM xcx_members where id>=(select id from xcx_members where v_type=1 order by id asc limit {$start},1) limit {$page_nums}";

$list = Db::query($sql);

foreach($list as $k=>$v)

{

yield [$v['mobile'],$v['realname'],$v['nickname'],$v['avatar']];

}

unset($list);

//刷新缓冲区

ob_flush();

flush();

}

}

public function index()

{

//生成的csv文件名称

$demo_csv_filename = time().".csv";

//每页查询数量

$page_nums = 10000;

//总页数

$count = Db::name("members")->count("id");

if($count < $page_nums)

{

$total_page = 1;

}

else

{

$total_page = intval($count / $page_nums) + 1;

}

//csv文件存入的路径

$base_path = CMF_ROOT."public/upload/";

//导入表头

$title = [

'手机号','真实姓名','昵称','头像'

];

$fp = fopen($base_path.$demo_csv_filename, 'a+');

//写入标题

fputcsv($fp, $title);

foreach(self::getData($total_page, $page_nums) as $m=>$n)

{

//写入内容

fputcsv($fp, $n);

}

fclose($fp);

$download_url = cmf_get_domain()."/upload/".$demo_csv_filename;

echo "";

die;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值