Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存储/选择货币值(贷记/借记)mysql_Php_Mysql_Sql - Fatal编程技术网

Php 存储/选择货币值(贷记/借记)mysql

Php 存储/选择货币值(贷记/借记)mysql,php,mysql,sql,Php,Mysql,Sql,我正在mysql数据库中存储货币值。贷方存储为say20.00,借方存储为-5.00。然后,我需要当前的余额,所以 Select Sum(amount) 在这种情况下,给我15.00 示例表1 uid amt 1 20 1 -5 示例表2 uid amt type 1 20 crd 1 5 dbt 如果是账户历史记录,我可以 select * from amount 因为这是监控值,而且像mysql这样的数据库系统时不时会贬低功能,我担心这是否是正

我正在mysql数据库中存储货币值。贷方存储为say
20.00
,借方存储为-5.00。然后,我需要当前的余额,所以

Select Sum(amount) 
在这种情况下,给我
15.00

示例表1

uid  amt
1    20
1    -5
示例表2

uid  amt type
1    20   crd
1    5    dbt
如果是账户历史记录,我可以

select * from amount
因为这是监控值,而且像mysql这样的数据库系统时不时会贬低功能,我担心这是否是正确的做法,我还考虑添加另一个字段,它可能指示事务类型,如

crd for credit
dbt for debit
etc

您的建议/最好的方法是什么?

对我来说,按原样存储数据(即显式存储)并使用负数会更有意义。如果使用无符号十进制并存储类型,您仍然可以这样做

SELECT SUM(IF(type = 'dbt', -1 * amount, amount))

将其存储为十进制或浮点。您到底害怕哪些功能被弃用?我宁愿将其存储为
20和-5
,而不是添加额外的列来确定它是贷方还是借方。更具体地说,您不应该担心它们可能会删除属于ANSI SQL的任何内容。依赖于实现的特性,如
IFNULL
,可能(但可能不会)消失,但
合并
不会消失。基本的算术,比如负数,对所有的计算来说都是非常基本的,你真的不必担心。单独的借贷值是多余的,当你可以用值的符号来表示时。在这种情况下,我如何获得平衡?你将使用一个case构造。但你想了解这两个选项中更差的选项的详细信息。我确实从示例组中按类型选择了SUM(amount),它将返回两行,第一行是借方,另一行是贷方。。然后,我不得不通过从借方中减去贷方来计算总额,但尤姆的情况要好得多:)