对于以下设置(简化):
transaction:
| transaction_id | account_id | transaction_amount |
| 1 | 1 | 80 |
| 2 | 2 | 30 |
| 3 | 3 | 66 |
wallet:
| wallet_id | wallet_type |account_id | wallet_total |
| 1 | 1 | 1 | 50 |
| 2 | 2 | 1 | 30 |
| 3 | 2 | 2 | 40 |
| 4 | 2 | 3 | 100 |
| 5 | 1 | 3 | 25 |
我需要以某种方式从wallet_type优先级中的钱包中减去transaction_amount(在这种情况下,wallet_type 1> wallet_type 2但优先级可以不同)。
e.g。
人1花费80,有2个包含50和30的钱包,首先从钱包1中取出50(wallet_type 1)然后拿出钱包2中的剩余30个(wallet_type 2),在两个钱包中留下0。
人2花30,有1个钱包(wallet_type 2)有40个,从中取30个离开10个
第3个人花费66,有2个包含25和100的钱包,首先从钱包1中取出25个(wallet_type 1)然后从钱包2(wallet_type 2)中取出(66-25 =)41,在钱包1和59中留下0在钱包2中。
循环执行事务后钱包的最终结果应如下所示:
| wallet_id | wallet_type |account_id | wallet_total |
| 1 | 1 | 1 | 0 |
| 2 | 2 | 1 | 0 |
| 3 | 2 | 2 | 10 |
| 4 | 2 | 3 | 59 |
| 5 | 1 | 3 | 0 |
我坚持在所有情况下都这样做,我可以轻松地从方案2中减去它,因为它们只有1个桶可以减去,但不知道如何在一次更新中从一个桶中减去另一个桶。
如果我可以更新事务表以反映放入一个更容易的存储桶之后的数量..但我无法触及事务表。
我也能够"有点"通过查看他们的总钱包是否等于交易金额然后将钱包归零来为方案1做到这一点..但是由于显而易见的原因,这并不适用于所有情况。
有没有办法在一个更新/脚本中执行此操作?