我有一个mysql表,在这里我使用这个查询:
INSERT INTO `stats` (`id`, `shop`, `price`, `timestamp`)
VALUES (NULL, '$shop', '$price', 'timestamp') ON DUPLICATE KEY UPDATE price='$price'商店栏是独一无二的。"Id“=主键。时间戳列由mysql: on update 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 (<--价格没有更改)结果:现有行是未更新
我想让第二个案子开始工作。我可以用php-代码来处理它,但我宁愿让Mysql来完成这个工作。有什么想法吗?(我尝试添加像$shop=shop这样的Where子句)
发布于 2018-04-23 08:57:10
因为shop列是唯一的键,所以可以删除id列并使用下面的内容。
replace into stats (shop, price) values ('$shop', '$price')如果商店已经存在,那么价格就会更新。否则就会有一家新的商店。这是你想要的吗?
发布于 2018-04-23 11:09:39
尝试手动更新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;
ENDhttps://stackoverflow.com/questions/49976842
复制相似问题