【问题标题】:Algorithm to add, edit and remove elements and update the value of the other ones添加、编辑和删除元素以及更新其他元素值的算法
【发布时间】:2015-06-16 04:46:19
【问题描述】:

我目前正在开发一个系统,我需要一些帮助。我有一个存储一些客户信息的数据库表。

每条记录都有一个支付日期和一个支付金额。例如:

Customer 1, 2015-06-15, $10
Customer 1, 2015-06-30, $10
Customer 1, 2015-07-15, $10
Customer 2, 2015-06-14, $15
Customer 2, 2015-06-20, $15
...

每个客户都有一个要支付的总金额(客户 1 需要支付 30 美元,客户 2 需要支付 30 美元,等等)。总量存储在数据库的不同表中。现在,如果有人为客户 1 添加了新的付款,系统应该更新其他付款(例如,如果新付款的金额为 6 美元,那么我们需要从其他 3 笔付款中减去 6 美元。在这种情况下,客户 1 的记录应更新为:

Customer 1, 2015-06-15, $8
Customer 1, 2015-06-30, $8
Customer 1, 2015-07-15, $8
Customer 1, 2015-07-30, $6
...

因为客户 1 需要支付 30 美元,并且由于我们要添加新的额外 6 美元,所以我们需要拆分所有现有记录的更改。

如果有人编辑或删除其中一条记录也是如此。

这个想法是通过在用户执行添加/编辑/删除操作时更新所有记录来始终保持总量相同。

有什么想法吗?

提前致谢

【问题讨论】:

  • 一种方法是使用数据库触发器。它们在表更新、插入完成或某些删除条目时起作用。如果你有一个mysql数据库,我可以给你一个例子。
  • 非常感谢您的回答@v.eigler。不幸的是,我需要通过代码来实现这一点(在这种特定情况下,通过 php)。
  • 好吧,我给你举了触发器的例子。这是我最喜欢的方式,但如果将使用 php 进行更改,您也可以在 PHP 中执行此操作。

标签: php mysql algorithm


【解决方案1】:

这是一个可以解决您的问题的触发器示例。 您可以在特定表上添加触发器之前或之后插入/更新/删除。 要将付款金额拆分为单个发票记录(我认为您所描述的是发票),您必须计算发票,然后将付款金额除以该计数(对不起,我的工程师。)。 使用NEW.***,您可以访问将要插入或更新的数据。我认为您应该在删除之前使用OLD.***,但我不舒尔。

CREATE TRIGGER on_new_payment BEFORE INSERT ON payments
FOR EACH ROW
BEGIN
DECLARE countpayment INT;
SET countpayment = (SELECT count(*) FROM table_invoices where customer=NEW.customer);
UPDATE table_invoices SET amount = amount - (NEW.amount / countpayment) where customer = NEW.customer;
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多