2017-07-21 40 views
1

我有一個表如何在一個表中的一個命令,在我的SQL更新兩行

accountdetails 

與領域

customerid,balance,account id 

現在我試着通過我的節點的應用程序來更新這個地方的時候我轉移的金額,在一個記錄中的值應該借記,在另一個它應該被記入

var data = {customerid,transferamount,accountid}; 


con.query('update accountdetails set balance = balance-? WHERE customerid = ? , 
[data.transferamount,data.customerid]') 

con.query('update accountdetails set balance = balance+? WHERE accountid = ?, 
[data.transferamount,data.accountid]') 

所以目前我有兩個命令來做到這一點,我們如何限制這一點,因爲兩者都基本上更新單個表。

任何想法

+1

我不認爲你應該這樣做。由於where子句完全不同,所以兩個查詢都很好。 – kawadhiya21

+0

爲了減少使用我想它做單指令 – user7350714

+1

休息的呼叫數量看看這篇文章:https://stackoverflow.com/questions/23266854/node-mysql-multiple-statement-in-one-query –

回答

0

同意@ kawadhiya21,也許最好不要做......你必須標杆兩種情況下要弄清楚的表現,但總的來說,它是可能的:

sql = 'update accountdetails'; 
sql += 'set balance = if(customerid = ?, balance - ?, if(accountid = ?, balance + ?, balance)) '; 
sql += 'where customerid = ? or accountid = ?'; 
con.query(sql, [ 
    data.customerid, 
    data.transferamount, 
    data.accountid, 
    data.transferamount, 
    data.customerid, 
    data.accountid 
]); 
0

美好的一天,

是的,這兩個命令必須保持更新你的數據,因爲你的命令有不同的條件。

您的第一個命令條件是WHERE customerid,而另一個命令條件是WHERE accountid,所以不可能將它們組合成一個命令。

0

最好的做法之一是使用MySQL的觸發器。這些是可執行該任務的可編程數據庫對象。 你基本上描述的是一個AFTER UPDATE觸發器。對於實施例:具體上AFTER UPDATE觸發器上的觸發器here 更多信息


CREATE TRIGGER doTheJob AFTER UPDATE ON accountdetails 
FOR EACH ROW 

BEGIN 
UPDATE accountdetails 
SET balance = +? WHERE accountid = ? 

    END; 
    DELIMITER ; 

更多信息here

相關問題