前提:不使用循环
1、sku具备添加、删除、修改功能,绑定数据sku
sku:[
{
goods_id: "1MJlrjS17jQ",
id: 103,
inventory: "10",
price: 588,
sku_id: "15617774918",
sku_name: "黑色",
state: 1
},
{
goods_id: "1MJlrjS17jQ",
id: 104,
inventory: "10",
price: 588,
sku_id: "15617775015",
sku_name: "红色",
state: 1
}
]
2、使用replace into必须根据唯一主键判断,数据库的唯一主键是id,但是编辑状态添加的sku是没有id的(已有的sku id是从数据库读出来的)
let skudata=[
["1MJlrjS17jQ",103,"10",588,"15617774918","黑色",state: 1],
["1MJlrjS17jQ",104,"10",588,"15617775015","红色",state: 1]
let sql = "replace into test(goods_id,id,inventory,price,sku_id,sku_name,state) values ?";
conn.query(sql,skudata, function (err, result) {
});
3、本来用insert into ...on duplicate key update是最好选择,但是在node.js里好像行不通,insert后面的问号可以用数组表示多条记录,update后面好像不能用数组
let sql = "insert into test(goods_id,id,inventory,price,sku_id,sku_name,state) values ? on duplicate key update name= ?";
4、最后一个方案就是根据goods_id查出所有sku然后删除,然后把新的添加进去,所有方法都不理想有没有更好的方法可以解决这个问题。
mysql 有个 case when 方法,可以根据不同的 id 来操作不同的数据,可以参考一下 updateBatch 方法,replace into 会产生一个 id 自增,然后你的最后一个方案是把事情复杂化了,不推荐使用,这样的操作会完全破坏原始数据,同时一堆关联表的数据也需要修改,得不偿失。nodejs 具体怎么用我不太清楚哈,甚至可以是 stackoverflow 搜一下答案