1

嗨,我在 php 中有这段代码来更新 $table5 中的余额字段。现在我的问题是,当两个字段之一即addsub为 NULL 时,这不会返回余额。

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

请帮忙。

4

3 回答 3

4

我试过你的查询,它工作得很好,经过一些细微的调整:http ://sqlfiddle.com/#!2/a6220/4

最终查询应如下所示: SELECT (SUM(IFNULL(add,0)))-(SUM(IFNULL(sub,0))) AS bal FROM ".$table5."

您忘记添加),而且在 SUM() 之后还有空格。SUM 是一个函数,因此在().

于 2013-12-19T15:47:04.663 回答
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()is时才进行替换NULLsum()聚合函数将值NULL视为0.

注意:我将ifnull()函数替换为 ANSI 标准等效项coalesce()

于 2013-12-19T15:38:06.293 回答
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) )
于 2013-12-19T15:38:21.847 回答