2017-04-16 143 views
0

我有一個名爲UserRequests的表。我需要將RequestStatus更新爲Completed,Time更新爲當前日期時間以獲得一對請求記錄。我使用Node.js的mysql的模塊https://github.com/mysqljs/mysqlNode.js MySQL在一個查詢語句中更新多行

通常單個記錄更新,我會做:

connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = ? where idRequest = ?', ['Completed', new Date(), hReqId], function(err, rows){ 
    connection.release(); 
}); 

但在我來說,我需要完成,當前日期時間的狀態更新多個UserRequests行。

我在列表中獲取所有更新的請求標識。問題是我如何編寫查詢語句來將它們全部更新到一起。

我試過使用多個查詢語句,但它沒有工作。其他解決方案的幾個也沒有工作。很少有行吟詩人的解決方案我想:

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

我不知道您可以將單獨的參數列表傳遞給任何語言的查詢。如果可以的話,它會對數據庫產生多個查詢。

您可以通過將所有值都放在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()函數,而不是來自應用程序的日期/時間。這可確保列一致,並且不受其他機器上的時鐘影響。

+0

我試過這段代碼,但它只更新了'somerowid1'行,somerowid2行沒有更新。 – codeinprogress

1

您正在尋找的 'IN' 操作符,所以你可以試試:

connection.query('update UserRequests set RequestStatus = ?, ReqCompletedDateTime = ? where idRequest IN (?)', ['Completed', new Date(), idsArray.join()], function(err, rows){ 
    connection.release(); 
}); 

特殊照顧 'idsArray' 應該是這樣的:

​​

的 '加入' 功能將轉換數組字符串

看看這個答案: update in

  • 請注意,我沒有專門爲您的情況測試此代碼,但它應該可以工作!

祝你好運!

+0

我試過你的解決方案,雖然它不給我任何錯誤,但它也不更新行。 – codeinprogress

+0

你能發佈你收到的回覆嗎? – Shachar

+0

在回調函數返回的「rows」var中顯示:{「fieldCount」:0,「affectedRows」:0,「insertId」:0,「serverStatus」:2,「warningCount」:0,「message」:「 (行匹配:0改變:0警告:0「,」protocol41「:true,」changedRows「:0} – codeinprogress