数据库分批导出为csv文件

发布时间:2017-12-12 23:48:22编辑:admin阅读(4462)

    boss需要1500万个手机号码,导出为excel文件

    由于数量太大,直接存一个文件,打开电脑会直接卡死。

    需要分为15批,每批100万。

    可以手工在navicat软件上面运行,根据MySQL分页公式

    (page-1)*page_size,page_size

    也即是(当前分页-1)*每页数量,每页数量

    示例sql:

    select mobile from tbl_sms
    LIMIT 0,1000000

    第二页

    select mobile from tbl_sms
    LIMIT 1000000,1000000

    .......

    后面的依次类推


    所以写了一个完整的php文件,部分引用数据库连接的地方,请自行修改

    <?php
    /**
     * Created by PhpStorm.
     * User: xx
     * Date: 2017/12/11
     * Time: 13:29
     */
    
    set_time_limit(0);
    //引入框架
    include(dirname(__FILE__) .'/../header.php');
    ini_set('memory_limit','1200M');
    
    //导出为csv文件
    function import_csv($i){
        //csv文件位置
        $filePath="/upload/tmp/sms/".$i. '.csv';
        //PHP文件处理类 SplFileObject,5.12版本以上都有
        $fileObj = new SplFileObject($filePath, 'ab');
        //分页公式 (page-1)*page_size,也即是(当前分页-1)*每页数量
        $start=($i-1)*1000000;
        //sql语句
        $sql="select mobile from tbl_sms_201711
        LIMIT $start,1000000";
        echo $sql."\n";
        //exit;
        //框架连接数据库,这里指定的是sms,执行sql语句
        //注意:这里我自己用的框架,请自行修改
        $res=db::connect('sms')->query($sql);
        //print_r($res);
        //遍历数组,写入文件
        foreach ($res as $values) {
            $fileObj->fputcsv(array_map(function ($item){
                return iconv('UTF-8', 'GBK', $item);
            }, $values));
        }
    }
    
    //执行15次
    for ($i=1;$i<=15;$i++){
        import_csv($i);
    }

    执行效果如下:

    select mobile from tbl_sms_201711

        LIMIT 0,1000000

    select mobile from tbl_sms_201711

        LIMIT 1000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 2000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 3000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 4000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 5000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 6000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 7000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 8000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 9000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 10000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 11000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 12000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 13000000,1000000

    select mobile from tbl_sms_201711

        LIMIT 14000000,1000000


    查看/upload/tmp/sms目录

    total 175800
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 10.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 11.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 12.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 13.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 14.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:37 15.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:35 1.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:35 2.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:35 3.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:35 4.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:35 5.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:35 6.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 7.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 8.csv
    -rw-r--r-- 1 root root 12000000 Dec 12 15:36 9.csv


关键字

上一篇: 清除 thinkphp跟php的 X-Powered-By

下一篇: 没有了