收藏此站 联系我们 腾云网络科技有限公司
关于我们 行业动态 网站建设 技术日志
当前位置:首页 » 网站建设 » mysql关于数据量大的时候分页分批处理

mysql关于数据量大的时候分页分批处理

作者: 宿迁腾云网络 . 阅读量: . 发表时间:2017-07-17

  

前几天遇到一个问题是,数据库一开始有24W是信息,需要取出来,进行下载到excel中。一开始遇到的问题是,excel表格行只有65535条行数,远远不够,有人说了很多其他解决方式,为了快速开发我就直接使用了导出txt文本文件的方式,解决了筛选数据的问题。但是第二天,由于联通活动增量很快,一下子就到了50W左右,之前写的程序莫名其妙的不可以使用了,老是报500的错误,后来按照别人讲的,进行分批次处理,其实就是分页的原理。

下面是代码:

其中mysqli_query语句都被微擎封装过了,可以不用注重具体的语法,看思路。

$sql = "SELECT count(id) AS count FROM `ims_lwxleon_box_data`"; //计算出总记录数 分页处理
$countNum = pdo_fetchall($sql);
$countNum = intval($countNum[0]['count']);//$countNum为int型总记录数
$key = 100000;                            //设置每次循环取出的记录数
$times = intval(ceil($countNum/$key));    //设置循环次数   向上取整,比如我有245000条数据,每次10W,就是循环25次
$recordList = array();
$keyTypeNum = array();

for ($i=0;$i<$times;$i++){        //循环
   $original = ($i)*$key;              //设置取记录的初始点
   $sql="SELECT keytype,phone FROM `ims_lwxleon_box_data` LIMIT ".$original.','.$key;  //limit查找
   $res = pdo_fetchall($sql);

   foreach ($res as $k => $v){
       if (!in_array($v['keytype'],$recordList[$v['phone']])){
           $recordList[$v['phone']][] = $v['keytype'];
           $keyTypeNum[$v['phone']] += 1;
       }
   }
   //导出1把钥匙  2把钥匙  3把钥匙 4把钥匙 5把钥匙的数据
   $oneList=array();
   $twoList=array();
   $threeList=array();
   $fourList=array();
   $fiveList=array();
   foreach ($keyTypeNum as $k => $v){
       switch ($v){
           case 1:
               $oneList[] = $k;
               break;
           case 2:
               $twoList[] = $k;
               break;
           case 3:
               $threeList[] = $k;
               break;
           case 4:
               $fourList[] = $k;
               break;
           case 5:
               $fiveList[] = $k;
               break;
       }
   }

   // print_r($recordList);exit();
   $title="<tr><td>tel</td></tr>";
   $keycount=intval($_GPC['keycount']);
   if($keycount==1){
       exportTxt('一把钥匙拥有者',$oneList);
   }elseif($keycount==2){
       $twoList = array_merge($twoList,$threeList);
       $twoList = array_merge($twoList,$fourList);
       $twoList = array_merge($twoList,$fiveList);
       exportTxt('两把钥匙拥有者',$twoList);
   }elseif($keycount==3){
       $threeList = array_merge($threeList,$fourList);
       $threeList = array_merge($threeList,$fiveList);
       exportTxt('三把钥匙拥有者',$threeList);
   }elseif($keycount==4){
       $fourList = array_merge($fourList,$fiveList);
       exportTxt('四把钥匙拥有者',$fourList);
   }elseif($keycount==5){
       exportTxt('五把钥匙拥有者',$fiveList);
   }
}

//导出电话号码    每次调用函数的时候,data的数据会自动添加在下载的文档中
function exportTxt($name,$data){
   Header( "Content-type:   application/octet-stream ");
   Header( "Accept-Ranges:   bytes ");
   header( "Content-Disposition:   attachment;   filename=".$name.".txt ");
   header( "Expires:   0 ");
   header( "Cache-Control:   must-revalidate,   post-check=0,   pre-check=0 ");
   header( "Pragma:   public ");
   foreach ($data as $k=>$v){
       echo $v."\r\n";
   }
}



 转载声明:本文由宿迁腾云网络原创文章
 转载请注明来源:http://www.tyweb.net/wzjs/1500264812.html
 宿迁腾云网络科技有限公司专注 宿迁网站建设 宿迁专业做网站 宿迁网站制作 DEDE织梦仿站 微信开发 APP开发
现在咨询免费送诊断方案,每天限3名
马上填写资料获取方案
腾云网络产品
网站建设 营销型网站 手机网站建设 企业建站套餐
腾云网络服务
7x24小时售后支持 全市上门服务 免费后台培训 定期回访
关于腾云网络
关于我们
行业动态 网站建设 技术日志
联系腾云网络
联系腾云网络
紧急问题处理电话
131-6035-5545131-6035-5545
131-6035-5545
扫一扫关注腾云网络公众号