2017-07-27 54 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

'這張表是跟蹤一個項目的價格歷史'軌道的歷史意味着你想要存儲所有價格變動 –

相關問題