ThinkPHP3.23遍历(分批)处理大量数据解决方法

前言

在php开发中经常有处理大量数据的需求,但是单次读出太大数据再遍历报内存溢出报错,用ini_set('memory_limit','-1');可以避免报错,但是页面加载会很慢。很多时候也不能解决问题。

解决思路

  • 给数据库中每条记录加上一个处理状态的字段status = 0 。【0=>表示未处理,1=>表示已处理】
  • 分批按status = 0条件查询数据并处理,处理完成修改记录status = 1
  • 浏览器挂机执行即可。

应用场景

  • 需要定时处理的各种需求,比如结算
  • 处理大量数据时服务器跑不动的情况。

实现代码

public function test(){
		// ini_set('memory_limit','-1');//设置脚本内存限制 -1表示不限制
		// set_time_limit(0);//设置最大脚本运行时间 0为不限制
		
		$User = M("User"); // 实例化User对象
        $user = $User->where('status=0')->limit(0,1)->select(); //定义查询条件  通过limit来限制每次处理条数
	    if(!empty($user)){
	        foreach($invest as $i){
	            /*
	            	这里编写处理数据代码
	            */
	            $User->where('id='.$i['id'])->setField('status',1);//修改该记录处理状态
	        }
	    }else{
	        echo '处理完成';
	    }
	    //这里控制每次执行时间  浏览器自动刷新执行下一批数据
	    $url = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . '?' . $_SERVER['QUERY_STRING'];
		echo '<script type="text/javascript">
            setInterval(refresh,1000)
            function refresh(){
                window.location.href = "' . $url . '";
            }
        </script>';
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值