编辑:这实际上工作正常,不知道为什么我不这么认为。
我有一个价格表,其中包含一列price_was
,需要包含价格最高的价值。
是否可以执行REPLACE查询,如果需要可以更新它?
以下(在PHP中动态简化和构建)似乎不起作用。
REPLACE prices
SET price = 1.99,
price_was = IF(1.99 > price_was, 1.99, price_was)
id_product = 1
我想也许这是不可能的,但是我很乐意听到,因为我正在更新许多记录并且需要尽可能高效。
答案 0 :(得分:2)
您发布的查询确实有效,请亲自尝试。我会使用UPDATE,因为你只更新了一个字段,并且REPLACE可以覆盖你想要的其他列数据。
答案 1 :(得分:0)
请尝试INSERT ... ON DUPLICATE KEY UPDATE
:
INSERT INTO prices (price, price_was, id_product)
VALUES (1.99, 1.99, 1)
ON DUPLICATE KEY UPDATE
price_was = IF(VALUES(price) > price_was, VALUES(price), price_was)
id_product = VALUES(id_product)
这将执行INSERT或UPDATE,而REPLACE语句执行INSERT或DELETE后跟INSERT。您无法在REPLACE语句中引用旧值,可能是因为DELETE / INSERT语义。来自the docs:
所有列的值均取自 REPLACE中指定的值 声明。设置了任何缺失的列 到它们的默认值,就像 INSERT发生了。 你不能参考 来自当前行和使用的值 他们在新的一行。如果你使用的话 分配,例如SET col_name = col_name + 1,引用 右侧的列名是 被视为DEFAULT(col_name),所以 赋值等同于SET col_name = DEFAULT(col_name)+ 1。