【问题标题】:Insert or update a row based on data in 2 columns - 1 primary and 1 unique column根据 2 列中的数据插入或更新行 - 1 个主列和 1 个唯一列
【发布时间】:2019-07-18 12:20:34
【问题描述】:

我有一个这样的表结构:

  • id(主要)bigint
  • 属性(唯一)varchar(逗号分隔 数字)
  • product_id bigint
  • 价格文本

如果属性和产品 id 匹配,因此该行已经存在,那么我只想更新价格,否则,创建一个新行。

我有这段代码,它是循环的一部分,它将发送多个包含不同属性、产品 ID 和价格的 INSERT INTO 查询,现在它无法确定属性和产品 ID 是否匹配并且似乎只会更新属性列上的价格匹配:

INSERT INTO my_table (id,attributes,product_id,price) VALUES ('','61','4000','500') ON DUPLICATE KEY UPDATEprice= '500'

我尝试在属性和产品 id 列上定义唯一性,但是这样做时它会更新仅与属性匹配的现有行上的价格(当产品 id 不匹配时意味着价格被添加到错误的行)+ 未创建新行。

也许答案是不同的结构。我该怎么做?

【问题讨论】:

  • (attributes, product_id) 上创建复合UNIQUE 约束。在这种情况下,您还可以摆脱自动增量id。此外,当您为 attributes 列说“逗号分隔数字”时,它闻起来像是糟糕的设计。停止存储分隔符分隔的值;而是规范化数据库。阅读:Is storing a delimited list in a database column really that bad?

标签: php mysql database


【解决方案1】:

试试

INSERT INTO my_table (attributes,product_id,price) VALUES ('61','4000','500') ON DUPLICATE KEY UPDATE price= '500'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多