我有一张表(id, name, price, menu_id)
我有一个页面,其中显示了每个项目的名称和价格,用户可以对其进行编辑。
但是当我提交时,它会创建新的行。
索引位于主键上。它应该在别的东西上吗?
我尝试了以下内容:
INSERT INTO gerechten
SET gerecht_naam = :naam, gerecht_prijs = :prijs, menu_id = :menuid
ON DUPLICATE KEY
UPDATE gerecht_naam = :naam, gerecht_prijs = :prijs
答案 0 :(得分:1)
只要表中的任何unique key
崩溃,您的查询就会转换为更新。由您决定应该放置此密钥的位置。例如,您的查询可能是:
INSERT INTO `gerechten` (`name`, `price`, `menu_id`)
VALUES (:name, :price, :menuid)
ON DUPLICATE KEY UPDATE
name = :name,
price = :price
在name
AND menu_id
上有唯一索引。 (我相信只要它在不同的菜单中就可以有几次同名)
当然,如果有各种字段组合必须是唯一的,这是一个有问题的情况,也许您应该使用不同的方法,例如select ... lock
语句来检查以前是否存在正在编辑的值。
答案 1 :(得分:0)
您需要在gerech_naam
列和/或gerech_prijs
添加UNIQUE key(您可以在两列中定义行的唯一性)。
如果您要在表格中实现这些唯一键,则必须注意您仍然会遇到问题,因为如果您更改数据库中的名称或价格,可能会insert
因为数据你提供的表格中不存在。