2014-05-13 72 views
0

我有一個複雜的查詢,其中包含ON DUPLICATE KEY Update。我只想插入最後一個值,如果沒有「timestamp_dag」= 1420070400的行,如果有一行有這種情況我不想做任何事情。MySQL - 條件插入行中的一個查詢與ON DUPLICATE KEY UPDATE

INSERT INTO data_prijzen_advertentie (
    `ID_advertentie`,`jaar`,`rijnr`,`status_prijs`,`datum_dag`,`timestamp_dag`, 
    `prijs_maand`,`prijs_week`,`prijs_midweek`,`prijs_langweekend`,`prijs_weekend`, 
    `prijs_dag`,`prijs_ochtend`,`prijs_middag` 
) 
VALUES 
    (100,2014,1,1,'12-05-2014',1399852800,0,100,0,75,0,0,0,0), 
    (100,2014,2,1,'23-05-2014',1400803200,0,75,0,101,0,0,0,0), 
    (100,2014,3,1,'30-05-2014',1401408000,0,100,0,75,0,0,0,0), 
    (100,2014,4,1,'01-01-2015',1420070400,0,0,0,0,0,0,0,0) 
ON DUPLICATE KEY UPDATE 
    status_prijs = VALUES(status_prijs), datum_dag = VALUES(datum_dag), 
    timestamp_dag = VALUES(timestamp_dag), prijs_maand = VALUES(prijs_maand), 
    prijs_week = VALUES(prijs_week), prijs_midweek = VALUES(prijs_midweek), 
    prijs_langweekend = VALUES(prijs_langweekend), prijs_weekend = VALUES(prijs_weekend), 
    prijs_dag = VALUES(prijs_dag), prijs_ochtend = VALUES(prijs_ochtend), 
    prijs_middag = VALUES(prijs_middag); 

回答

0

這是最好的,如果你能查詢字符串創建.. 之前,但如果你不能處理這個問題,和你的特殊價值是靜態的,你可以嘗試這樣的事: (我沒有試圖尚未雖然運行)

INSERT INTO data_prijzen_advertentie (
    `ID_advertentie`,`jaar`,`rijnr`,`status_prijs`,`datum_dag`,`timestamp_dag`, 
    `prijs_maand`,`prijs_week`,`prijs_midweek`,`prijs_langweekend`,`prijs_weekend`, 
    `prijs_dag`,`prijs_ochtend`,`prijs_middag` 
) 
VALUES 
    (100,2014,1,1,'12-05-2014',1399852800,0,100,0,75,0,0,0,0), 
    (100,2014,2,1,'23-05-2014',1400803200,0,75,0,101,0,0,0,0), 
    (100,2014,3,1,'30-05-2014',1401408000,0,100,0,75,0,0,0,0), 
    (100,2014,4,1,'01-01-2015',1420070400,0,0,0,0,0,0,0,0) 
ON DUPLICATE KEY UPDATE 
    status_prijs = IF(timestamp_dag<>1420070400, VALUES(status_prijs), status_prijs), 
    datum_dag = IF(timestamp_dag<>1420070400, VALUES(datum_dag), datum_dag), 
    timestamp_dag = IF(timestamp_dag<>1420070400, VALUES(timestamp_dag), timestamp_dag), 
    prijs_maand = IF(timestamp_dag<>1420070400, VALUES(prijs_maand), prijs_maand), 
    prijs_week = IF(timestamp_dag<>1420070400, VALUES(prijs_week), prijs_week), 
    prijs_midweek = IF(timestamp_dag<>1420070400, VALUES(prijs_midweek), prijs_midweek), 
    prijs_langweekend = IF(timestamp_dag<>1420070400, VALUES(prijs_langweekend), prijs_langweekend), 
    prijs_weekend = IF(timestamp_dag<>1420070400, VALUES(prijs_weekend), prijs_weekend), 
    prijs_dag = IF(timestamp_dag<>1420070400, VALUES(prijs_dag), prijs_dag), 
    prijs_ochtend = IF(timestamp_dag<>1420070400, VALUES(prijs_ochtend), prijs_ochtend), 
    prijs_middag = IF(timestamp_dag<>1420070400, VALUES(prijs_middag), prijs_middag); 
0

您只需如果timestamp_dag匹配條件觸發它運行ON DUPLICATE KEY UPDATE ...部分。從MySQL docs

如果指定了對重複密鑰更新,和行插入該 會引起一個唯一索引或主鍵的重複值,進行 更新舊行。

因此,假設您的表是以這種方式構建的,那麼更新將會觸發。您可以使用語法as described here添加UNIQUE索引。

CREATE UNIQUE INDEX ind_unique_timestamp_dag ON data_prijzen_advertentie (timestamp_dag) 
+0

如果添加行的其餘部分的唯一索引更新(在重複鍵)也不能工作了.... –

+0

所以只是爲了確認,你真正想要的'對重複密鑰更新...'踢的部分?從你的問題看起來好像是否有重複,那麼你不想用你試圖插入的值來更新它。如果它不存在,你只想插入? –

+0

亞歷克斯,我確實想要使用更新exept爲具有1420070400值的行。 –

相關問題