【问题标题】:Database trigger How to insert sum of values, from one table to another?数据库触发器如何将值的总和从一个表插入到另一个表?
【发布时间】:2019-03-29 14:24:42
【问题描述】:

我认为最好的方法是触发器?有什么想法吗?

我应该为 Payments 表中的每个用户名分别插入 payment_amount 的总和,到 total_moneytotal_balance 每次插入新的货币时都应该自动插入表付款

例如: 用户“John”在他的账户中充值了 2 次 100 美元和 50 美元,他的账户中总计 150 美元

表格中的示例:

表格:付款

 ID      username     payment_amount    Status  
+-------+-------------+-------------+-----------+
|   1   |  John       |     100     | Complete  |
+-------+-------------+-------------+-----------+
|   2   |  John       |     50      | Complete  |
+-------+-------------+-------------+-----------+
|   3   |  Alex       |     100     | Complete  |
+-------+-------------+-------------+-----------+

表格:total_balance

 ID      username      total_money      
+-------+-------------+-------------+
|   1   |  John       |     150     | 
+-------+-------------+-------------+
|   2   |  Alex       |     100     |
+-------+-------------+-------------+

【问题讨论】:

  • 通常保持冗余不是一个好主意。让total_balance 成为查询总和的视图。
  • @stickybit 你能解释的更详细点吗?
  • 我给你写了一个更详细的答案。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Overflow 上发帖,您已根据CC BY-SA 3.0 license 授予 SO 分发该内容的不可撤销的权利。根据 SO 政策,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请在How does deleting work?了解更多信息

标签: mysql database-trigger


【解决方案1】:

我建议不要保留冗余数据。当不一致发生时,这很可能是灾难的根源。我建议您使用一个视图,它可以为您提供总和。

DROP TABLE total_balance;

CREATE VIEW total_balance
AS
SELECT p.username,
       sum(p.payment_amount) total_money
       FROM payments p
       GROUP BY p.username;

或者,如果您只想汇总已完成的付款:

DROP TABLE total_balance;

CREATE VIEW total_balance
AS
SELECT p.username,
       sum(p.payment_amount) total_money
       FROM payments p
       WHERE p.status = 'Complete'
       GROUP BY p.username;

视图中的数字将始终准确并反映当前情况。

【讨论】:

  • 1.错误:“字段列表”中未定义的“p.username”??什么是“p”? 2. 使用您的观点是否可以从 total_balance 中进行减法?使用查询?
  • @ShukurJank: 1.: p 只是一个别名。 payments 中是否有名为 username 的列? 2.:不,你不应该那样做。通过在付款表中添加交易来更改余额。
  • 我的问题与此类似,已解决,请用我的表检查和配置触发器link
  • 请纠正link这个用我的桌子回答的代码,我自己做不到,完全困惑:(
猜你喜欢
  • 2015-03-31
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多