【问题标题】:How do I make an update with an array in node-mysql如何使用 node-mysql 中的数组进行更新
【发布时间】:2015-12-09 22:09:26
【问题描述】:

我正在使用 nodejs-mysql,试图一次更新一堆行。

所以,我尝试了以下代码,但运气不佳:

var sql = "UPDATE users SET Gender=?, Super=? WHERE Name=?";
var valueArray = [];
for (var idx = 0; idx < data.length; idx++) {
    var char = data[idx];
    valueArray.push([char[4], char[5], char[1]]);
}

connection.query(sql, [valueArray], function(err, rows) {
});

我在插入时使用类似的语法(使用数组),效果很好。

那么,为了更新,这样做有什么问题呢? 当我执行这个时,我得到一个语法错误:(

我应该以其他方式这样做吗?

【问题讨论】:

  • 什么是 console.log(inspect(valueArray))?我认为你的价值观是错误的,或者是不正常的。

标签: mysql node.js node-mysql


【解决方案1】:

正如您所说,它适用于 INSERT。 node-mysql 库将您描述的带有嵌套数组的 INSERT 语句转换为一条语句,例如:

var valueArray = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']];
var sql = "INSERT INTO users SET Gender=?, Super=? WHERE Name=?";
connection.query(sql, valueArray, function(err, rows) {
    // do something...
});

转换为:

INSERT INTO users
    (Gender, Super, Name)
VALUES
    ('a', 'b', 'c'),
    ('d', 'e', 'f'),
    ('g', 'h', 'i');

然而,在一条语句中更新多个实体在 sql 中并不容易。 您可以为循环中的每个条目查询数据库,也可以构造一个大语句,例如:

var valueArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
var sql = "UPDATE users SET Gender=?, Super=? WHERE Name = ?;"
        + "UPDATE users SET Gender=?, Super=? WHERE Name = ?;"
        + "UPDATE users SET Gender=?, Super=? WHERE Name = ?;"

在这种情况下,您需要在连接中允许 multiple statements

【讨论】:

  • 有没有办法用一个 sql 查询更新我的数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2021-05-23
  • 2020-07-19
  • 1970-01-01
  • 2016-09-21
相关资源
最近更新 更多