2017-07-27 55 views
-2

我试图用一个简单的表格插入一个具有相同ID的新行,但只有当值不同时才插入。只有当数值不同时才插入MYSQL

该表格用于追踪物品的价格历史。该表具有以下的列:

ID,时间戳,的productID,价格

我只是想插入一个新的记录,如果任何产品不存在,或者该产品确实存在,但价格已经改变。

不幸的是,由于我的知识水平有限,我有一个大脑障碍,并且希望能够帮助转向,因此我没有在代码上做任何试验。

谢谢!

+0

谷歌'MYSQL INSERT ON DUPLICATE' –

+0

我想你指的https://dev.mysql.com/doc/ refman/5.7/en/insert-on-duplicate.html但会更新,不会插入新行。我想要一个新的行。 – mika

回答

0

你可以尝试这样的事:

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); 

所以,这句话无论是插入新行(新产品或新价格),或者什么也不做

+0

这工作完全解决了您在您的评论与前面的可能性价格变化恢复到以前的值提出的问题。非常感谢! – mika

+0

它似乎有某种问题,当产品ID是字母数字,它返回一个未知的列错误。我试图弄清楚,但也想提供反馈给你。 例如: 'SET @PRODUCT = P017428772; #产品id' – mika

+0

@mika你一定是在开玩笑,你当然应该附上字符串转换为单引号,像'SET @PRODUCT =“P017428772”;'如果你不知道 - 我建议你停止任何你”重新做,打开任何SQL本书对于初学者 –

-1

u需要composite primary key

ALTER TABLE products ADD PRIMARY KEY(product,price);

此查询后,如果您插入,如果产品和价格是表中同一重复的条目

返回错误,否则将插入查询甚至一个领域值更改

+0

它不起作用,例如价格是'1',然后改为'2',然后再次回到'1' –

+0

那里没有这样的话,他只是说“产品确实存在,但价格已经改变。 “和@IlyaBursov,他想存储历史像价格变化1今天明天它将是2就像我的回答是正确的根据我的关注 –

+0

'这张表是跟踪一个项目的价格历史'轨道的历史意味着你想要存储所有价格变动 –

相关问题