我试图用一个简单的表格插入一个具有相同ID的新行,但只有当值不同时才插入。只有当数值不同时才插入MYSQL
该表格用于追踪物品的价格历史。该表具有以下的列:
ID,时间戳,的productID,价格
我只是想插入一个新的记录,如果任何产品不存在,或者该产品确实存在,但价格已经改变。
不幸的是,由于我的知识水平有限,我有一个大脑障碍,并且希望能够帮助转向,因此我没有在代码上做任何试验。
谢谢!
我试图用一个简单的表格插入一个具有相同ID的新行,但只有当值不同时才插入。只有当数值不同时才插入MYSQL
该表格用于追踪物品的价格历史。该表具有以下的列:
ID,时间戳,的productID,价格
我只是想插入一个新的记录,如果任何产品不存在,或者该产品确实存在,但价格已经改变。
不幸的是,由于我的知识水平有限,我有一个大脑障碍,并且希望能够帮助转向,因此我没有在代码上做任何试验。
谢谢!
你可以尝试这样的事:
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`[email protected] order by `id` desc limit 1) as p
on (v.product=p.product)
where
(p.price is null) or
(p.price <> v.price);
所以,这句话无论是插入新行(新产品或新价格),或者什么也不做
u需要composite primary key
ALTER TABLE products ADD PRIMARY KEY(product,price);
此查询后,如果您插入,如果产品和价格是表中同一重复的条目
返回错误,否则将插入查询甚至一个领域值更改
它不起作用,例如价格是'1',然后改为'2',然后再次回到'1' –
那里没有这样的话,他只是说“产品确实存在,但价格已经改变。 “和@IlyaBursov,他想存储历史像价格变化1今天明天它将是2就像我的回答是正确的根据我的关注 –
'这张表是跟踪一个项目的价格历史'轨道的历史意味着你想要存储所有价格变动 –
谷歌'MYSQL INSERT ON DUPLICATE' –
我想你指的https://dev.mysql.com/doc/ refman/5.7/en/insert-on-duplicate.html但会更新,不会插入新行。我想要一个新的行。 – mika