我正在尝试将具有相同ID的新行插入到简单表中,但只想在值不同时插入。
此表用于跟踪商品的价格历史记录。该表格包含以下列:
id,timestamp,productID,price
如果产品不存在或产品确实存在但价格已发生变化,我只想插入新记录。
不幸的是,由于我的知识有限,我有脑力障碍,并且会感谢有关转向的帮助,所以我没有对代码进行任何试验来做到这一点。
谢谢!
答案 0 :(得分:2)
SET @PRODUCT = 1; # product id
SET @PRICE = 1; # new product price
insert into `t`(`product`, `timestamp`, `price`)
select v.product, now(), v.price
from
(select @PRODUCT as `product`, @PRICE as `price`) as v
left outer join
(select `product`, `price` from `t` where `product`=@PRODUCT order by `id` desc limit 1) as p
on (v.product=p.product)
where
(p.price is null) or
(p.price <> v.price);
所以,这句话要么插入新行(对于新产品或新价格)要么不做任何事情
答案 1 :(得分:-1)
你需要composite primary key
ALTER TABLE products ADD PRIMARY KEY(product,price);
在此查询之后,如果您在表中的产品和价格相同时插入,则返回带有重复条目的错误
或者即使一个字段值发生变化也会插入查询