2015-04-30 44 views
0

我需要一些幫助來理解觸發器及其工作原理。我有3個表:使用MySQL觸發器更新客戶餘額

客戶
ID |餘額

發票
Id | Custid |金額

付款
Id | CustId |量

我有一個INSERT語句來插入發票:

$this->db->insert('invoices', array(
      'CustomerId' => $data['customerId'], 
      'Description' => $data['Description'], 
      'DateCreated' => $data['DateCreated'], 
      'Amount' => $data['Amount'] 
     )); 

和需要更新插入後客戶的平衡。同樣,插入或創建付款後。我需要從客戶餘額中扣除。

public function createPayment($data) { 
     $this->db->insert('payments', array(
      'CustomerId' => $data['customerid'], 
      'DateCreated' => date("Y-m-d H:i:s"), 
      'Amount' => $data['amount'] 
     )); 
    } 

任何協助將不勝感激創造這些觸發器。

回答

1

你需要兩個觸發器 - 一個發票表:

delimiter // 
CREATE TRIGGER add_invoice_to_balance AFTER INSERT ON invoices 
FOR EACH 
ROW 
BEGIN 
    UPDATE Customers SET balance = balance + NEW.Amount 
     WHERE Customers.id = NEW.custid; 
END; 
// 
delimiter; 

和一個支付表:

delimiter // 
CREATE TRIGGER add_payment_to_balance AFTER INSERT ON payments 
FOR EACH 
ROW 
BEGIN 
    UPDATE Customers SET balance = balance - NEW.Amount 
     WHERE Customers.id = NEW.custid; 
END; 
// 
delimiter ; 

fiddle here

+0

謝謝你..這工作。非常感激。 NEW.Amount是否來自插入查詢? – user1367386

+0

正確。如果它是UPDATE觸發器之後,則可以訪問'NEW'值以及'OLD'值。如果這項工作已經完成,請隨時將其標記爲已接受 –