|
最近做一个数据转换,需要把大约几G的数据从数据库取出来,然后处理字段,再放回另一个表。
数据库用的Mysql 5,PHP 5.2.X,连接的远端数据库。
要求不能堵死网站的正常连接,不能让服务器崩溃。
看看我写的分页取数据代码:
//运行
transformData(50, 0);
/**
* 做数据转换
* @param int $per 每页取多少条数据
* @param int $total 需要处理的总数据量,为零则处理所有符合条件的数据
**/
function transformData($per = 50, $total = 0) {
$curTime = time(); //当前时间
$start = 0; //开始记录
$count = 0; //计数器
while (true) {
$limit = "limit {$start},{$per}";
$where = array('limit'=>$limit);
//取数据
$publishedResult = DB: :select("ID,Name,StatusType", "tb_data", $where, 'DBName');
$where['type']=1;
$noPublishedResult = DB: :select("ID,Name,StatusType", "tb_company", $where, 'DBName');
$where['type']=2;
$pausedResult = DB: :select("ID,Name,StatusType", "tb_fromDta", $where, 'DBName');
$result = array_merge($publishedResult, $noPublishedResult);
$result = array_merge($result, $pausedResult);
$start += $per;
if (!empty($result)) {
//下面是处理每条数据
foreach($result as $k = >$row) {
.......
$count++;
if ($total != 0 && $count >= $total) {
break;
}
}
if ($total != 0 && $count >= $total) {
break;
}
} else {
break;
}
}
}
更多PHP文章请看我的博客http://baicaier.iteye.com |
|
|