如何在带有Node.js的forloop中使用mysql查询

时间:2018-10-10 04:58:19

标签: javascript node.js ecmascript-6

我想使用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是解决方案,但我不知道如何使用它。

3 个答案:

答案 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;                    
                });
     }   
}