mysql用php怎么分批处理插入?比如前1000条数据处理结束后,再处理1001至2000条,然后再处理2001至3000条……,直到全部处理完毕?

php中文网
发布: 2016-06-23 13:44:26
原创
1417人浏览过

当表 member中数据量不大时,可以一次性执行:

$q="select * from member'";$r=$obj_db->simplequery($q);while($a=$obj_db->fetchrow($r,DB_FETCHMODE_ASSOC)){   $id=$a[id];   $mccd=$a[cca]+$a[ccb];      $query="insert into mingxi (mid,mccd,mtime) values ('$id','$mccd','$time')";   $obj_db->simplequery($query);}
登录后复制


但当member中数据量达到百万条时,说会出现执行超时的错误:
Fatal error: Maximum execution time of 30 seconds exceeded in D:

那么怎么现实分批处理呢,比如前1000条数据处理结束后,再处理1001至2000条,然后再处理2001至3000条……,直到全部处理完毕?

$q="select * from member'";$r=$obj_db->simplequery($q);while($a=$obj_db->fetchrow($r,DB_FETCHMODE_ASSOC)){$i++;$ep=1000;//这里假设处理完第1个1000条后再处理第二个1000条,直至处理结束?   $id=$a[id];   $mccd=$a[cca]+$a[ccb];      $query="insert into mingxi (mid,mccd,mtime) values ('$id','$mccd','$time')";   $obj_db->simplequery($query);}
登录后复制



请高手帮写出详细代码,谢谢!因代码隐藏在后台执行,所以不要考虑用分页一页一页手工去点的方式

钉钉 AI 助理
钉钉 AI 助理

钉钉AI助理汇集了钉钉AI产品能力,帮助企业迈入智能新时代。

钉钉 AI 助理 21
查看详情 钉钉 AI 助理

回复讨论(解决方案)

可以用 insert into mingxi (mid,mccd,mtime)  select  id, cca+ccb, time from member

 最近处理一些数据 大约56万条,包括每条的读取 计算 处理 和插入

使用一个ajax方法去请求PHP页面,调一个尚未被处理的进行处理,完毕后打上已处理的标记存库,返回到js,  ajax接收到返回以后(可以先输出到页面上)调用自身,再次发起请求

56万条跑了大约10万秒,  页面和程序没死过

虽然很慢,但这跟我的需求(需要把每条数据进行分析处理)有关  而且不会超时什么的.

 最近处理一些数据 大约56万条,包括每条的读取 计算 处理 和插入

使用一个ajax方法去请求PHP页面,调一个尚未被处理的进行处理,完毕后打上已处理的标记存库,返回到js,  ajax接收到返回以后(可以先输出到页面上)调用自身,再次发起请求

56万条跑了大约10万秒,  页面和程序没死过

虽然很慢,但这跟我的需求(需要把每条数据进行分析处理)有关  而且不会超时什么的.



这种方法没法试用异步, 处理完毕的返回值有可能先行返回, 除非是查询一条然后提交一条的方式. 否则有可能会造成数据丢失.
当然如果1天跑完  你两天都没关 应该是没太大问题.


 最近处理一些数据 大约56万条,包括每条的读取 计算 处理 和插入

使用一个ajax方法去请求PHP页面,调一个尚未被处理的进行处理,完毕后打上已处理的标记存库,返回到js,  ajax接收到返回以后(可以先输出到页面上)调用自身,再次发起请求

56万条跑了大约10万秒,  页面和程序没死过

虽然很慢,但这跟我的需求(需要把每条数据进行分析处理)有关  而且不会超时什么的.



这种方法没法试用异步, 处理完毕的返回值有可能先行返回, 除非是查询一条然后提交一条的方式. 否则有可能会造成数据丢失.
当然如果1天跑完  你两天都没关 应该是没太大问题.

为何会先行返回? 没看明白能否举个例子说明下 

$offs = isset($_GET['offs']) ? $_GET['offs'] : 1;$sql = "select * from member limit $offs, 1000";//做你该做的事header("Location: $_SERVER[PHP_SELF]?offs=" . ($offs+1000));
登录后复制

$offs = isset($_GET['offs']) ? $_GET['offs'] : 1;$sql = "select * from member limit $offs, 1000";//做你该做的事header("Location: $_SERVER[PHP_SELF]?offs=" . ($offs+1000));
登录后复制



放在哪里呢?你这个是不是等于不断刷新页面啊?页面中还有一些其它代码,这个页面只能执行一次,谢谢

同问 有解决吗

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号