2013-12-19 33 views
0

嗨,我在php中更新了$ table5中的餘額字段。現在我的問題是,當兩個字段之一,即addsub是NULL時,這不會返回餘額。當任何一個字段爲NULL時,Mysql的字段總和不工作

$fetch_balance = mysql_query("SELECT (SUM (IFNULL(`add`,0))-(SUM (IFNULL(`sub`,0)))   AS `bal` FROM `".$table5."` "); 

請幫忙。

+1

你的代碼片段在查詢中有不平衡的圓括號,所以缺少結果可能是由於錯誤而不是'IFNULL',它肯定會做你期望的結果。你不需要所有的括號,所以只需要爲你的查詢字符串分配「SELECT SUM(IFNULL(add,0)) - SUM(IFNULL(sub,0))FROM $ table5」'。 –

+1

@EdGibbs,很好地捕捉到不平衡的括號。看起來像另一個開發人員沒有檢查mysql_query()返回false的情況。 –

+0

'SUM'和第一個'(',在所有MySQL服務器上沒有像預期的那樣有效。「 –

回答

4

我想你的查詢,它的工作就好了,以後一些輕微的調整:http://sqlfiddle.com/#!2/a6220/4

最後的查詢應該看像這樣: SELECT (SUM(IFNULL(add,0)))-(SUM(IFNULL(sub,0))) AS bal FROM ".$table5."

您忘記了添加一個),還有,SUM()後面有空格。 SUM是一個函數,因此在()之前不應該有任何空格。

+0

是的,謝謝我認爲這是工作。thnx多 – user2649343

1

您的查詢簡化爲語法正確:

SELECT SUM(IFNULL(`add`, 0) - SUM(IFNULL(`sub`, 0) AS `bal` 
FROM `".$table5."`; 

假設表中有行,那麼這將返回一個非NULL值bal。如果表格沒有行,那麼它將返回NULL

你可能打算這樣的邏輯:

select coalesce(sum(`add`), 0) - coalesce(sum(`sub`), 0) as bal 
from . . .; 

這確實更換隻有當整個sum()NULLsum()聚合函數將NULL值視爲0

注意:我將ifnull()功能替換爲ANSI標準等效coalesce()

0
create table foo (bar1 integer, bar2 integer); 

insert into foo (bar1, bar2) values (null, 1); 
insert into foo (bar1, bar2) values (1, null); 

select sum(coalesce(bar1, 0) + coalesce(bar2, 0)) from foo; 
>2 

select sum(bar1 + bar2) from foo; 
>null 

編輯提示:嘗試是這樣的:

SELECT SUM (IFNULL(`add`,0) - IFNULL(`sub`,0)) 
相關問題