我想使用mysql查询在for循环中更新数据库。
for(let i=0;i<userarray.length;i++){
console.log(i);
var sql = "update user set user_status=1 where id=" + userarray[i].id;
con.query(sql, function(err, result) {
if (err) throw err;
console.log("Number of row update: " + result.affectedRows);
});
}
and the output is:
1
2
3
4
Number of row update:1
Number of row update:0
Number of row update:0
Number of row update:0
这里只有一次数据库正在更新。我发现async / await是解决方案,但我不知道如何使用它。
答案 0 :(得分:2)
如果您正在使用mysql库,则应使用参数插入ID
const userarray = [{id:0}, {id:2}, {id:5}];
const idsList = [userarray .map(user => user.id)];
const sql = "UPDATE user SET user_status = 1 WHERE id IN (?)";
con.query(sql, idsList, (err, result) => {
if(err) throw err;
console.log(result);
});
答案 1 :(得分:0)
也许您可以在SQL查询中使用IN
运算符
let sql = 'update user set user_status = 1 where id IN (';
const userarray = [
{
id: 1,
},
{
id: 2,
},
{
id: 3,
},
];
for(let i = 0; i < userarray.length; i++) {
const split = i === 0 ? '' : ',';
sql += `${split}${userarray[i].id}`;
}
sql += ')';
console.log(sql)
答案 2 :(得分:-2)
用作:
var sql = "update user set user_status=1 where id in ("
for(let i=0;i<userarray.length;i++){
if(i!=userarray.length-1){
sql += userarray[i].id + ",";
}
else{
sql += userarray[i].id + ")";
con.query(sql, function(err, result) {
if (err) throw err;
});
}
}