$db = Db::getInstance();
$str="select ast_no,use_life,pur_cost,reman_value,md_amt,ytzj_life from ast_basic where class_type = 'G'";
$res=$db->query($str);
for($i=0;$i<count($res);$i++) {
$sql1="select reman_value from ast_basic where ast_no ='".$res[$i]["ast_no"]."' and acc_period <'".$acc_period."'";//上月原值
$val1=$db->query($sql1);
$sql2="select acc_zj, ytzj_life from ast_detail where ast_no ='".$res[$i]["ast_no"]."' and acc_period <'".$acc_period."' order by acc_period DESC Limit 1";//本期已提足折旧的固定资产原值
$val2=$db->query($sql2);
$TISBR_ZJ=($val1[0]["reman_value"]-$val2[0]["acc_zj"])/$res[$i]["use_life"]/12;//本期应提折旧额
$sql="select pur_cost,reman_value,md_amt from ast_basic where ast_no ='".$res[$i]["ast_no"]."'";//累计折旧额
$result=$db->query($sql);
$leij=$result[0]["pur_cost"]-$result[0]["reman_value"]+$result[0]["md_amt"];
if($res[$i]["ytzj_life"]==0)
{
$_POST["ytzj_life"]=$res[$i]["ytzj_life"]+1;
}
else
{
$_POST["ytzj_life"]=$val2["ytzj_life"]+1;
}
$_POST["ast_no"]=$res[$i]["ast_no"];
$_POST["acc_period"]=$acc_period;
$_POST["zj_ym"]=$zj_ym;
$_POST["acc_zj"]=$leij;
$_POST["tisbr_zj"]=$TISBR_ZJ;
if (false === $ast_detail->create ()) {
$this->assign("message",$ast_detail->getError ());
}
//保存当前数据对象
$list=$ast_detail->add ();
}
上面部分是在做查询,然后将查询获取的数据进行计算,最后插入到另一张表中。有什么办法可以优化一下的,运行太慢了。
$str="select ast_no,use_life,pur_cost,reman_value,md_amt,ytzj_life from ast_basic where class_type = 'G'";
$res=$db->query($str);
for($i=0;$i<count($res);$i++) {
$sql1="select reman_value from ast_basic where ast_no ='".$res[$i]["ast_no"]."' and acc_period <'".$acc_period."'";//上月原值
$val1=$db->query($sql1);
$sql2="select acc_zj, ytzj_life from ast_detail where ast_no ='".$res[$i]["ast_no"]."' and acc_period <'".$acc_period."' order by acc_period DESC Limit 1";//本期已提足折旧的固定资产原值
$val2=$db->query($sql2);
$TISBR_ZJ=($val1[0]["reman_value"]-$val2[0]["acc_zj"])/$res[$i]["use_life"]/12;//本期应提折旧额
$sql="select pur_cost,reman_value,md_amt from ast_basic where ast_no ='".$res[$i]["ast_no"]."'";//累计折旧额
$result=$db->query($sql);
$leij=$result[0]["pur_cost"]-$result[0]["reman_value"]+$result[0]["md_amt"];
if($res[$i]["ytzj_life"]==0)
{
$_POST["ytzj_life"]=$res[$i]["ytzj_life"]+1;
}
else
{
$_POST["ytzj_life"]=$val2["ytzj_life"]+1;
}
$_POST["ast_no"]=$res[$i]["ast_no"];
$_POST["acc_period"]=$acc_period;
$_POST["zj_ym"]=$zj_ym;
$_POST["acc_zj"]=$leij;
$_POST["tisbr_zj"]=$TISBR_ZJ;
if (false === $ast_detail->create ()) {
$this->assign("message",$ast_detail->getError ());
}
//保存当前数据对象
$list=$ast_detail->add ();
}
上面部分是在做查询,然后将查询获取的数据进行计算,最后插入到另一张表中。有什么办法可以优化一下的,运行太慢了。
$s='';
for($i=0;$i<count($res);$i++) {
$s .= "'".$res[$i]["ast_no"]."',";
}
$s = substr($sa,0,-1);
//然后sql语句改成这样:
$sql1="select reman_value from ast_basic where ast_no in (".$s.") and acc_period <'".$acc_period."'";//上月原值
//其他的sql语句依照这个样式改就行了。关键是要了解sql语句中in的用法这样一改,原来的多次的检索,就变成了一次检索,效率大大的提高。
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)