我正在尝试向表中插入新内容或更新同一个查询中的前一个。我可以用一些 php 代码解决它,但我的目标是在 sql 中全部完成。
问题
我的应用程序有不同语言的名称,我可以向它添加新语言。当我添加新语言时,我的产品的翻译会增加。我的目标是发送脚本信息,如果两列相同,则应更新数据,但如果不是,则应更新。
这是我的一些查询:
"INSERT INTO product_name(link,product_id,language)
VALUES(:link,:product_id,:language) ON DUPLICATE KEY UPDATE
link=:link,product_id=:product_id,language=:language"
上面的这个查询解决了问题的一部分,但是当我想更改链接时,它会添加新数据。我的目标是更改链接,如果该行中的 product_id 和语言相同,则应该更新,如果不是应该添加一个新的。Unique 不会解决问题,因为我需要在表中使用相同的语言和 ID。
我认为您只需要一个唯一约束(product_id, language)
——并且在所有三列上都没有唯一约束或主键。
CREATE UNIQUE INDEX unq_productname_product_language ON product_name(product_id, language);
这要求这对值是唯一的,而不是每个值都是唯一的。
那么这应该做你想做的:
INSERT INTO product_name(link, product_id, language)
VALUES (:link, :product_id, :language)
ON DUPLICATE KEY UPDATE link = VALUES(link);
请注意,此版本使用VALUES(link)
. 这将使用在语句中插入的值。我认为这比重复表达更清楚。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句