Node.js MySQL在一个查询语句

时间:2017-04-16 11:10:26

标签: mysql node.js

我有一个名为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();
});

我做错了什么?

2 个答案:

答案 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()函数,而不是应用程序的日期/时间。这可确保列一致,并且不受其他计算机上的时钟影响。