Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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 计算用户';现在钱包的余额是多少?_Php_Mysql_Codeigniter_Transactions_Activerecord Calculations - Fatal编程技术网

Php 计算用户';现在钱包的余额是多少?

Php 计算用户';现在钱包的余额是多少?,php,mysql,codeigniter,transactions,activerecord-calculations,Php,Mysql,Codeigniter,Transactions,Activerecord Calculations,我正在尝试为web应用程序实现一个钱包。我现在提出的DB设计是一个钱包交易表,如下所示: wallet_tr_id | user_id | amount | tr_type (debit/credit) | datetime | tr_id 应用程序中的用户可以通过现金或钱包信用进行交易。另一个交易表保存所有交易信息,通过钱包信用支付/赚取的交易信息用外键tru id输入上表 现在,显示用户当前钱包余额的最佳方式是什么 我应该为该用户计算sum total of credits-sum tot

我正在尝试为web应用程序实现一个钱包。我现在提出的DB设计是一个钱包交易表,如下所示:

wallet_tr_id | user_id | amount | tr_type (debit/credit) | datetime | tr_id
应用程序中的用户可以通过现金或钱包信用进行交易。另一个
交易
表保存所有交易信息,通过钱包信用支付/赚取的交易信息用外键
tru id
输入上表

现在,显示用户当前钱包余额的最佳方式是什么

我应该为该用户计算
sum total of credits-sum total of debits
,还是应该在其他表格中为某个用户维护
current_balance


PS:对于任何用户来说,最终都不会有大量的交易

无需存储余额。按照你说的计算一下:

select sum(case when tr_type = 'credit' then amount else -amount end) as balance
from transactions
where user_id = 12345;

不需要储存余额。按照你说的计算一下:

select sum(case when tr_type = 'credit' then amount else -amount end) as balance
from transactions
where user_id = 12345;


我建议您在数据库中维护当前的平衡字段。在报表中显示交易很容易。您可以在每次CR&DR后显示余额。不存储当前余额,请计算它。您可能希望根据钱包id持有期初余额,并将其更新到您删除的位置transactions@P.Salmon:删除某些事务是一种好做法吗?@kishor10d有时这是必要的-可能是因为空间或性能方面的考虑-我不一定意味着完全丢失它们,根据业务规则和法律/法规要求,它们可能需要保存在业务中的某个位置(但不一定在生产系统中,甚至不一定在rdbms中)。我建议您在数据库中维护当前的平衡字段。在报表中显示交易很容易。您可以在每次CR&DR后显示余额。不存储当前余额,请计算它。您可能希望根据钱包id持有期初余额,并将其更新到您删除的位置transactions@P.Salmon:删除某些事务是一种好做法吗?@kishor10d有时这是必要的-可能是因为空间或性能方面的考虑-我不一定意味着完全丢失它们,根据业务规则和法律/法规要求,它们可能需要保存在业务中的某个位置(但不一定在生产系统中,甚至不一定在rdbms中)。感谢SQL查询!这是一个很好的答案,但是将当前余额存储在一个单独的表中并在用户希望看到它时检索它不是更容易吗。假设您要在多个位置显示当前余额,并且每次都必须对1000万条交易记录执行此计算。@Delali:我们试图避免数据库中的冗余,因为这可能导致不一致。但是是的,您可以将余额存储在用户表中,并编写一个触发器,用每个新事务更新余额。因此,您甚至可以稍后从数据库中删除事务,并且仍然知道当前余额。正如OP提到的,每个用户不会有很多事务,但是,在这种特殊情况下不需要这样做;从事务表中获得余额就足够了。@ThorstenKettner,值得注意。感谢SQL查询!这是一个很好的答案,但是将当前余额存储在一个单独的表中并在用户希望看到它时检索它不是更容易吗。假设您要在多个位置显示当前余额,并且每次都必须对1000万条交易记录执行此计算。@Delali:我们试图避免数据库中的冗余,因为这可能导致不一致。但是是的,您可以将余额存储在用户表中,并编写一个触发器,用每个新事务更新余额。因此,您甚至可以稍后从数据库中删除事务,并且仍然知道当前余额。正如OP提到的,每个用户不会有很多事务,但是,在这种特殊情况下不需要这样做;从交易表中获得余额就足够了。@ThorstenKettner,著名的。