我試圖用一個簡單的表格插入一個具有相同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