-2
     function sum($nomId){
    $sql = "SELECT SUM(nomDetCantidad) FROM table2 where Id = $nomId";
$Resultado=$this->ProcesaSQLQueryList($sql);
if($Resultado>0){
foreach($Resultado as $key => $valor){
$cantidadTotal = $valor[0];
}
}
if($Resultado=='null'){$cantidadTotal=0;}
$sql = "UPDATE table1 SET nomCantidadTotal=$cantidadTotal,nomActualizado = NOW() WHERE nomId= $nomId";
return $this->ProcesaSQLQueryUpdate($sql);

这是我调用的函数

      function ProcesaSQLQueryList($SQLQuery){

        $row= array();
        if(!$this->link_mysql) $this->link_mysql = conectarManager();
        if($res = mysql_query($SQLQuery,$this->link_mysql)){

            while($r = mysql_fetch_array($res)){
                $row[] = $r;
            }
            mysql_free_result($res);
            return $row;
        }else{
            $this->last_error = $SQLQuery . " - " . mysql_error();  
            return -1;
        }
    }

因此,我用表 1 的外键总结我在字段表 2 中的所有内容,然后我的结果将更新为表 1 字段,但如果我删除表 2 中的字段,结果将不会更新为 0 任何建议我都很漂亮确定这是一个简单的,但似乎无法找到它

4

2 回答 2

1

如果在 table2 中没有“匹配”行时需要返回零,则将返回表达式包装在 IFNULL 函数中。

SELECT IFNULL(SUM(nomDetCantidad),0) FROM table2 ... 

您可以通过在单个 UPDATE 语句中完成所有这些工作来显着减少您拥有的代码量、减少到数据库的往返次数并提高性能。您可以使用相关子查询或 OUTER JOIN:

-- 使用相关子查询

 UPDATE table t1
    SET t1.nomActualizado = NOW()
      , t1.nomCantidadTotal = 
        ( SELECT IFNULL(SUM(t2.nomDetCantidad),0) AS nomCantidadTotal
            FROM table2 t2
           WHERE t2.Id = t1.nomID
        )
  WHERE t1.nomId = $nomId

-- 使用外连接

 UPDATE table1 t1
   LEFT
   JOIN (SELECT t2.Id, SUM(t2.nomDetCantidad) AS nomCantidadTotal
           FROM table2 t2
          WHERE t2.Id = $nomId
          GROUP BY t2.Id
        ) s
     ON s.Id = t1.nomID
    SET t1.nomCantidadTotal = IFNULL(s.nomCantidadTotal,0)
      , t1.nomActualizado = NOW()
  WHERE t1.nomID = $nomId

完全不清楚为什么需要将此总计存储在 table1 上,当您可以在需要时从 table2 派生它时,根本不需要将该值存储在 table1 上......

SELECT t1.nomId
     , IFNULL((SELECT SUM(t2.nomDetCantidad) AS nomCantidadTotal
                FROM table2 t2
               WHERE t2.Id = t1.nomID
       ),0) AS nomCantidadTotal
  FROM table1 t1
 WHERE t1.nomId = $nomId
于 2012-07-11T18:27:37.880 回答
1
$sql = "SELECT SUM(nomDetCantidad) FROM table2 where nominaId = $nomId";
$Resultado = $this->ProcesaSQLQueryList($sql);

if ($Resultado > 0) {
    foreach ($Resultado as $key => $valor) {
        $cantidadTotal = $valor[0];
    }
}

if ($cantidadTotal == '') {
    $cantidadTotal=0.00;
}

$sql = "UPDATE table1 SET nomCantidadTotal=$cantidadTotal,nomActualizado = NOW() WHERE nomId = $nomId";

return $this->ProcesaSQLQueryUpdate($sql);

那里!它向我发送了一个空白变量 xD,但已修复,并且有更合适的方法可以做到这一点,我同意 Spencer 但如果客户想要红色秋千,他必须得到红色秋千,你知道吗?:) 感谢您的帮助!

于 2012-07-12T17:06:52.087 回答