MYSQL 计数方法


MYSQL Count Method

     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;
        }
    }

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

$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 但已修复,并且有更合适的方法可以做到这一点,我同意斯宾塞的观点,但如果客户想要红色秋千,他必须得到一个红色秋千,你知道吗?:)谢谢你们的帮助!

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

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

通过在单个 UPDATE 语句中执行所有这些工作,可以显著减少代码量、减少数据库往返次数并提高性能。您可以使用相关子查询或外部连接:

-- 使用相关的子查询

 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

完全不清楚为什么您需要将此总数存储在表 1 上,而您可以随时从表 2 中派生它,而根本不会将该值存储在表 1 上......

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