mysql - 有没有办法在nodejs中的mysql 'insert'查询中动态设置多个VALUES?

标签 mysql node.js

我第一次使用nodejs。我有一个场景,我有 json 数组,如下所示。 我不知道该数组中有多少个 json 项。

我尝试过使用循环的解决方案,但它会多次触发查询。我不希望这样。

{"qualification":[{"degreeName":"B","domain":"p"},{"degreeName":"A","domain":"q"}]}

mysql查询会是这样的

INSERT INTO qualification (degreeName,domain) VALUES (B,p),(A,q);

在上面的查询中,我显式地写入了值,但由于我不知道会有多少值,所以我无法编写这样的值,而是必须将所有值放入变量中,然后将其传递给查询。 那么我如何检索资格数据并将其转换为变量或元组以放入 mysql 查询中,以便我可以触发单个查询并添加多个值。

最佳答案

您可以执行以下操作:您必须从动态值生成 values 数组并传递给查询。

Key point: ? is a unnamed parameter (placeholder alias) to make it Parameterised Query

const mysql = require('mysql');

const con = mysql.createConnection({
  host: "localhost",
  user: "yourusername",
  password: "yourpassword",
  database: "mydb"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  let sql = "INSERT INTO qualification (degreeName, domain) VALUES ?";
  let values = [
    ['B', 'p'],
    ['A', 'q'],
    ...
  ]; //this is dynamic value that you can create
  con.query(sql, [values], function (err, result) {
    if (err) throw err;
    console.log("Number of records inserted: " + result.affectedRows);
  });
});

从数据集中生成元组()(假设数据采用该格式):

const payload = {
  qualification: [
    { degreeName: "B", domain: "p" },
    { degreeName: "A", domain: "q" }
  ]
};
const tuples = payload.qualification.map(obj => [obj.degreeName, obj.domain]);

哪些OP是这样的:

[ [ 'B', 'p' ], [ 'A', 'q' ] ]

关于mysql - 有没有办法在nodejs中的mysql 'insert'查询中动态设置多个VALUES?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57745800/

相关文章:

node.js - Node -bash :/usr/sbin/node: No such file or directory

node.js - 如何使用 Node.js 访问 Google AdWords API?

javascript - 无法在命令提示符下运行nodejs脚本

php - Mysql 查询以检查对私有(private)页面的访问

mysql - 如何将表名连接到行值以重命名列

javascript - 当转义值时,Mysql 查询不再起作用

node.js - 基于 HTTPs 的 WebRTC 问题

javascript - Grunt 组合媒体查询 - 无法调用未定义的方法 "join"

java - org.springframework.beans.factory.BeanCreationException : Injection of autowired dependencies failed;

Mysql 表以相同的 order by 子句排序不同