上面有个地方写错了...下面是对的:<?php
set_time_limit(0);
require("conn.php");
$q1 = mssql_query("select id,data from chuli");
for($i = 1;$i <= mssql_num_rows($q1);$i++)
{
@mssql_data_seek($q1,$i);
$data = @mssql_fetch_array($q1);
preg_match_all("/[0-9]{1,10}包/",$data[1],$bao);
$baoshu = 0;
for($j = 0; $j <count($bao[0]); $j++)
$baoshu += intval(substr($bao[0][$j], 0, -1));
$q2 = mssql_query("update chuli set baoshu = $baoshu where id = $data[0]");
}
set_time_limit(60);
?>
set_time_limit(0);
require("conn.php");
$q1 = mssql_query("select id,data from chuli");
for($i = 1;$i <= mssql_num_rows($q1);$i++)
{
@mssql_data_seek($q1,$i);
$data = @mssql_fetch_array($q1);
preg_match_all("/[0-9]{1,10}包/",$data[1],$bao);
$baoshu = 0;
for($j = 0; $j <count($bao[0]); $j++)
$baoshu += intval(substr($bao[0][$j], 0, -1));
$q2 = mssql_query("update chuli set baoshu = $baoshu where id = $data[0]");
}
set_time_limit(60);
?>
如果不是的话~在MySQL内先过滤一次
这样的sql语句,不慢才怪呢.
要分段分次取.太没有效率了.
还是一次全取出来,然后每批处理100个,处理后把这100个id和$baoshu累加的写入txt文件里,结果130多万条15秒左右就处理完了,得到一个20M的txt文件,导入数据库,花了两三分钟吧。
set_time_limit(0);
require("conn.php");
$fp = fopen("getbaoshu.txt",'a');
$q1 = mssql_query("select id,data from chuli");for($i = 0;$i < mssql_num_rows($q1)/100;$i++)
{
$txt = "";
for($j=0; $i<100; $i++)
{
mssql_data_seek($q1, $j + $i*100);
$data = mssql_fetch_array($q1);
preg_match_all("/[0-9]{1,10}包/",$data[1],$bao);
$baoshu = 0;
for($k = 0; $k <count($bao[0]); $k++)
$baoshu += intval(substr($bao[0][$k], 0, -1));
$txt .= $data[0]."\t".$baoshu."\r\n";
}
fwrite($fp,$txt);
}
set_time_limit(60);
?>
这句话多余
另外用括号括起来,直接取$bao[1]就可以,不用substr