checkAttendance()里面有个for循环,userList大概有一百多个用户,这样一循环,结果就是最后那个res_arrays肯定是很大的,时间也比较长,有办法解决这个问题吗?
程序应该没问题,我在where后面加上限制条件,比如只有几个用户的时候就可以算出来的。
代码是这样的,打了一些码,希望不影响。。
http://pic.027cgb.cn/20170303...
checkAttendance()里面有个for循环,userList大概有一百多个用户,这样一循环,结果就是最后那个res_arrays肯定是很大的,时间也比较长,有办法解决这个问题吗?
程序应该没问题,我在where后面加上限制条件,比如只有几个用户的时候就可以算出来的。
代码是这样的,打了一些码,希望不影响。。
http://pic.027cgb.cn/20170303...
谢邀!
对于数据量大的首先如果有field最好限制field,而且可以分批处理,每次取5000(固定数量):
$userCount = D('model')->count();
for($i = 0; $i < ceil($userCount/5000); $i++) {
$begin = $i * 5000;
$end = ($i + 1) * 5000;
$userList = D('model')->field('key_name')->limit($begin, $end)->select();
foreach ($userList as $value) {
...
}
}
最后大批量的数据最好文件开头加上:
set_time_limit(0); //执行时间无限
ini_set('memory_limit', '-1'); //内存无限
看了一下,你的checkAttendance()
方法里面还有查询SQL,首先检查一下SQL执行速度,另外可以在循环的外层一次性查出数据后在来php做过滤筛选,数据量大的情况下做分次查询。
我觉得这个情况下,即使Php脚本一直在运行,但是你的web服务器应该会超时的,我觉得这样的操作不太好,应该改成异步的。下发这个任务,然后页面用ajax定时拉取一下执行结果,回显到页面给用户看比较好。
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答890 阅读✓ 已解决
1 回答581 阅读✓ 已解决
换到服务器上跑没问题了....谢谢各位大大回答~