执行多个sql insert语句而不将它们运行到node.js等中的某种循环中的意图。
典型的sql语句如下所示。
INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?);
INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?);
OR
INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?), (?, ?);
普通的node.js循环看起来像这样。
for (var i = 0; i < request.body.length; i++) {
queryRequest.sql += "INSERT INTO session_speaker(session_id, speaker_id) VALUES(?, ?);";
queryRequest.values.push(request.body[i].id, request.params.id);
}
意向/问题:
探索一种方法,如果可能的话,将request.body
传递给一个智能SQL,它采用数组本身或者可能是逗号分隔的值列表,并在没有node.js循环的情况下从那里插入多行。
request.body
看起来像这样(可以更改以满足要求)
[
{
"id": 12
},
{
"id": 34
}
]
答案 0 :(得分:0)
是的,这是可能的。 看看这个参考。 https://dev.mysql.com/doc/refman/5.7/en/json.html
这是你可以做的。
insert into select
参考:https://dev.mysql.com/doc/refman/5.1/en/insert-select.html 最后,你的代码是这样的:
insert into session_speaker(session_id, speaker_id)
select unnest_mysql ( arrayToString (dataTOArray( stringtojson (json_string) ) ) )
json_string
=这是你的数据来自
dataTOArray
=此函数将您的数据转换为mysql json到数组
dataTOArray
=这是将数组转换为字符串ex。 [1,2,3]
到'1,2,3'
unnest_mysql
=您的字符串行数据
string '1,2,3'
--view like
|-------String-----|
|---------1--------|
|---------2--------|
|---------3--------|
|----------- ------|
So when you insert this , it will become row in your table
注意:将我的功能更改为MySQL特定功能。
答案 1 :(得分:0)
我认为这让我更接近我正在寻找的东西。
https://github.com/felixge/node-mysql/issues/814
根据dougwilson的评论以及他对嵌套数组的解决方案,我可以简单地将多对象数组传递给查询,它将一次插入多个记录。
var currentLogs = [
[ 'Server', 'Socketio online', 'Port 3333', '2014-05-14 14:41:11' ],
[ 'Server', 'Waiting for Pi to connect...', 'Port: 8082', '2014-05-14 14:41:11' ]
];
pool.query('INSERT INTO logs_debug (socket_id,message,data,logged) VALUES ?', [currentLogs])