求node.js中mysql商品sku批量更新解决方案

前提:不使用循环

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然后删除,然后把新的添加进去,所有方法都不理想有没有更好的方法可以解决这个问题。

阅读 2.1k
1 个回答

mysql 有个 case when 方法,可以根据不同的 id 来操作不同的数据,可以参考一下 updateBatch 方法,replace into 会产生一个 id 自增,然后你的最后一个方案是把事情复杂化了,不推荐使用,这样的操作会完全破坏原始数据,同时一堆关联表的数据也需要修改,得不偿失。nodejs 具体怎么用我不太清楚哈,甚至可以是 stackoverflow 搜一下答案

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题