1

こんにちは、$table5 の残高フィールドを更新するために、php にこのコードがあります。今私の問題は、2 つのフィールドの 1 つ、すなわちaddorsubが NULL の場合、これはバランスを返さないことです。

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

助けてください。

4

3 に答える 3

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()これは、全体がの場合にのみ置換を行いNULLます。sum()集計関数は、値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

EDITヒント:次のようなものを試してください:

SELECT SUM ( IFNULL(`add`,0) - IFNULL(`sub`,0) )
于 2013-12-19T15:38:21.847 に答える