Я хочу обновить базу данных в цикле for с помощью запроса mysql.
for(let i=0;i<userarray.length;i++){
console.info(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.info("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 - это решение, но я не знаю, как его использовать.
Какую библиотеку вы используете для подключения к базе данных?
библиотека mysql ..



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Возможно, вы можете использовать оператор IN в запросе SQL
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.info(sql)Если вы используете библиотеку mysql, вы должны использовать параметр для вставки идентификаторов
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.info(result);
});
Перебор каждого идентификатора пользователя и выполнение одного запроса для каждого идентификатора пользователя крайне неэффективно. Вместо этого создайте один запрос и выполните этот единственный запрос один раз. Что-то вроде
update user set user_status=1 where id in (userarray[0], userarray[1]...)