A是明细表B是汇总表找出A表总的数据计算后写入B表。用户uid,所谓量表之间的唯一字段。汇总语句如下:$query = $this->db->query("SELECT uid,money FROM A $where order by id LIMIT $start_limit, $perpage");
while($row = $db->fetch_array($query)) {
$query_r = $db->query("SELECT * FROM B WHERE  uid='{$row['uid']}'");
$row_r = $db->fetch_array($query_r);
$r_id = $row_r['uid'];
if($r_id>0){
    $db->query("update money=money+{$row['money']} where uid=$r_id" );
}else{
    $db->query("insert B (`uid`,`money`)values($r_id,$row['money');
}
}
我是分页汇总。。每页20个。。汇总1万条数据。需要花半个多小时。太慢了。。大家有更好的解决方法吗?小弟再是感谢了

解决方案 »

  1.   

    pcboyxhy:如果数据有update的地方怎么做到一次性
      

  2.   

    abest:很简单。我代码已经举例出来了。和我汇总的方法是一样的。不合理的地方请多指点指点。小弟感激不尽。
      

  3.   


    你只需要计算出增量,最后一次性写入到B中,分页成20个,db操作次数太多了
      

  4.   

    pcboyxhy:批量的时候,有一个问题。如果两个uid不相同的,需要修改。update语句应该怎么写
      

  5.   


    update的时候,可以把N句写在一起,注意别超出SQL的最长限制就行了
      

  6.   

     $db->query("update money=money+{$row['money']} where uid=2,update money=money+{$row['money']} where uid=2" ); 
    这样吗。还是怎么写?
      

  7.   

    在顶下。。希望得到pcboyxhy帮忙
      

  8.   

    这个用finereport这样带有汇总填报功能的报表就可以
      

  9.   


    INSERT INTO `B`
    (`uid`,`money`)
    SELECT `uid`,`money`
    FROM `A`
    LIMIT 1 
    ON DUPLICATE KEY UPDATE 
    `B`.`money`=`B`.`money`+`A`.`money`;