2017-07-21 38 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

相关问题