MySQL与Node Express,使用地图更新
因此,我有一个用户表,其中包括“user_id”和“points”列 现在,我想使用Map/Array[{id:1,points:2},{id:2,points:4}等..]更新多行 另一个问题是,我想添加点值,所以使用for循环构建查询字符串有点困难,因为这样我需要预先获得值 (非工作)查询(仅用于理解问题)如下所示:MySQL与Node Express,使用地图更新,mysql,node.js,express,Mysql,Node.js,Express,因此,我有一个用户表,其中包括“user_id”和“points”列 现在,我想使用Map/Array[{id:1,points:2},{id:2,points:4}等..]更新多行 另一个问题是,我想添加点值,所以使用for循环构建查询字符串有点困难,因为这样我需要预先获得值 (非工作)查询(仅用于理解问题)如下所示: UPDATE users SET points = points + map[i].points WHERE id = map[i].id; 如前所述,无需添加值,我会事
UPDATE users SET points = points + map[i].points WHERE id = map[i].id;
如前所述,无需添加值,我会事先创建一个字符串,
使用类似
UPDATE users SET (points) VALUES(x,y,z) WHERE id IN(a, b, c);
但即便如此,我也不能确定更新的顺序是否与地图相同
编辑:我想在1个查询中进行编辑:)
有什么想法吗
编辑巴兹曼的回答正是我所需要的。以下是已修复的小语法错误:
var sql = 'UPDATE users SET points = CASE id';
var i = 0;
var idString='';
map.forEach(function(item){
sql += ' WHEN '+item.id+' THEN points + '+item.points;
idString += item.id.toString();
if(i < map.length-1){
idString +=', ';
}
i++;
});
sql += ' END WHERE id IN('+idString+') ;';
var sql='updateusers SET points=CASE id';
var i=0;
var-idString='';
映射forEach(功能(项目){
sql+='当'+item.id+'时,然后点+'+item.points;
idString+=item.id.toString();
如果(i
编辑:
在上面的代码中,Node.js将异步执行每个循环中的查询,这在执行时间上是可以接受的
但是,如果您想使其仅为一个查询操作,则应该执行一些字符串工作
var mysql = require('mysql');
var connection = mysql.createConnection({ user: 'root', database: 'test'});
var map = [{id:1, points:2}, {id:2, points:4}, ....];
var sql = 'UPDATE users SET points = CASE id';
var i = 0;
var idString='';
map.forEach(function(item){
sql += ' WHEN '+item.id+' THEN points + '+item.points;
idString += item.id.toString();
if(i < map.length-1)
idString +=', ';
}
sql += ' END WHERE id IN('+idString+')';
connection.query(sql, function(err, result){
if(err)
console.log(err);
console.log(result.affectedRows+' rows updated!');
});
var mysql=require('mysql');
var connection=mysql.createConnection({user:'root',database:'test'});
var-map=[{id:1,points:2},{id:2,points:4},…];
var sql='updateusers SET points=CASE id';
var i=0;
var-idString='';
映射forEach(功能(项目){
sql+='当'+item.id+'时,然后点+'+item.points;
idString+=item.id.toString();
如果(ivar mysql = require('mysql');
var connection = mysql.createConnection({ user: 'root', database: 'test'});
var map = [{id:1, points:2}, {id:2, points:4}, ....];
var sql = 'UPDATE users SET points = CASE id';
var i = 0;
var idString='';
map.forEach(function(item){
sql += ' WHEN '+item.id+' THEN points + '+item.points;
idString += item.id.toString();
if(i < map.length-1)
idString +=', ';
}
sql += ' END WHERE id IN('+idString+')';
connection.query(sql, function(err, result){
if(err)
console.log(err);
console.log(result.affectedRows+' rows updated!');
});