美文网首页
php导出百万级mysql数据到csv文件

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

作者: 苦涩的羽 | 来源:发表于2019-10-31 11:26 被阅读0次

<!--html代码-->

<a target="_blank" href="{:url('api/export/index')}">导出</a>

//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<$total_page; $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 "<script type='text/javascript'>document.location.href='{$download_url}'</script>";

        die;

}

相关文章

网友评论

      本文标题:php导出百万级mysql数据到csv文件

      本文链接:https://www.haomeiwen.com/subject/rogzvctx.html