我有一个使用此查询的mysql表:
INSERT INTO `stats` (`id`, `shop`, `price`, `timestamp`)
VALUES (NULL, '$shop', '$price', 'timestamp') ON DUPLICATE KEY UPDATE price='$price'
商店专栏是独一无二的。 “Id”=主键。时间戳列由mysql更新:更新CURRENT_TIMESTAMP
Data in the dB:
row: id=1, shop=viacom, price=5, timestamp=1524183480
案例1:要插入的行:shop = viacom,price = 6 结果:现有行已更新
案例2:要插入的行:shop = viacom,price = 5(< - 价格未更改) 结果:现有行不已更新
我想让案例2工作。我可以用php代码处理它,但我宁愿让Mysql做那个工作。有任何想法吗? (我尝试添加像$ shop = shop这样的Where子句)
答案 0 :(得分:0)
由于shop列是一个UNIQUE键,你可以删除id列并使用下面的内容。
replace into stats (shop, price) values ('$shop', '$price')
如果商店已经存在,则价格会更新。否则将插入一个新的商店。这是你想要的吗?
答案 1 :(得分:0)
尝试手动更新timestamp
列:
INSERT INTO `stats` (`shop`, `price`) VALUES ('$shop', '$price')
ON DUPLICATE KEY UPDATE price='$price', timestamp = NOW();
======
选项#2:
如果要在MySQL中执行此操作,请创建存储过程并从PHP代码调用存储过程。
CREATE PROCEDURE `createOrUpdatePrice` (ex_shop varchar(255),ex_price int(11))
BEGIN
declare occures tinyint(1);
SELECT COUNT(`shop`) into occures from `stats` WHERE shop = ex_shop;
IF occures = 0 Then
INSERT INTO `stats` (`id`, `shop`, `price`) VALUES (NULL, ex_shop, ex_price);
ELSE
UPDATE `stats` SET price = ex_price where shop = ex_shop;
END IF;
END