程序员笔记

与人方便,自己方便
当前位置:网站首页 / Thinkphp / 正文

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

2021-01-31 / Thinkphp / 47 次围观 / 0 次吐槽

前言

在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>';
	}


推荐您阅读更多有关于“thinkphpphp,”的文章

本站所有文章如无特别注明均为原创。作者:程序员小邓 ,复制或转载请以超链接形式注明转自 程序员笔记
原文地址《ThinkPHP3.23遍历(分批)处理大量数据解决方法
额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP

Copyright 程序员笔记 Rights Reserved.