我有一个名为UserRequests的表。我需要将RequestStatus更新为Completed,Time to current DateTime以获取一些请求记录。我正在使用node.js mysql模块https://github.com/mysqljs/mysql
通常对于单个记录更新,我会这样做:
connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = ? where idRequest = ?', ['Completed', new Date(), hReqId], function(err, rows){
connection.release();
});
但在我的情况下,我需要更新多个UserRequests行,其状态为已完成和当前日期时间。
我在列表中获取所有更新的请求ID。问题是如何编写查询语句,它将一起更新所有这些语句。
我尝试使用多个查询语句,但它不起作用。其他一些解决方案也没有用。我尝试过的解决方案很少:
connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = ? where idRequest = ?', [['Completed', new Date(), 'somerowid1'], ['Completed', new Date(), 'somerowid2']], function(err, rows){
connection.release();
});
OR
connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = ? where idRequest = ?', [{'Completed', new Date(), 'somerowid1'}, {'Completed', new Date(), 'somerowid2'}], function(err, rows){
connection.release();
});
我做错了什么?
答案 0 :(得分:1)
您正在寻找' IN'运算符,所以尝试类似:
connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = ? where idRequest IN (?)', ['Completed', new Date(), idsArray.join()], function(err, rows){
connection.release();
});
Youre' idsArray'应该是这样的:
idsArray = [1,2,3,4];
加入' function会将数组转换为字符串
看看这个答案: update in
答案 1 :(得分:0)
我不知道您可以使用任何语言将单独的参数列表传递给查询。如果可以的话,它会为数据库生成多个查询。
您可以将所有值放在in
列表中。查询看起来像:
update UserRequests
set RequestStatus = ?,
ReqCompletedDateTime = now()
where idRequest in (?, ?);
在代码中:
connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = now() where idRequest in (?, ?)', ['Completed', 'somerowid1', 'somerowid2'], function(err, rows) {
很遗憾,您无法将值列表参数化为in
。您需要为每个值单独占位符,或者您需要将列表直接插入查询字符串(不推荐)。
另请注意,ReqCompletedDateTime
使用数据库now()
函数,而不是应用程序的日期/时间。这可确保列一致,并且不受其他计算机上的时钟影响。