2012-07-11 27 views
-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); 

,這是功能我打電話MYSQL計數方法

 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任何建議我很確定這是一個容易的,但似乎無法找到它

+1

你需要這種非規範化嗎?爲什麼不在飛行中查詢? – RedFilter 2012-07-11 18:14:17

+0

即時通訊使用外部php文件,有很多查詢的 – 0rigin 2012-07-11 18:24:35

+0

該方法的工作,但我需要將其設置爲零,當我沒有記錄表二問題是我不知道它發送給我 – 0rigin 2012-07-11 18:25:52

回答

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但是固定的,並且有更合適的方法來做到這一點,我同意斯賓塞的觀點,但是如果客戶想要一個紅色的搖擺,他必須得到一個紅色的搖擺,你知道嗎? :)感謝幫助傢伙!

1

如果您需要返回零時有table2中沒有「匹配」行,然後在IFNULL函數中包裝返回表達式。

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

你可以顯著降低你的代碼量,減少往返次數到數據庫中,並通過這樣做所有這些工作在一個UPDATE語句來提高性能。您可以使用相關子查詢或OUTER JOIN:

- 使用子查詢correleated

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 

- 使用OUTER JOIN

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 
+0

沒有第一個沒有工作我只想檢查,如果我的第一個選擇不給我任何改變$ cantidadTotal到0 – 0rigin 2012-07-11 18:36:51