2014-10-01 101 views
3

Ik執行一個在de table中插入一些值的查詢,如果ID,Year,rownum(唯一索引)的組合存在,我做一個常規的ON DUPLICATE KEY UPDATE等等該行已更新。查詢看起來像這樣:MYSQL ON DUPLICATE KEY UPDATE和IGNORE在一個查詢中

INSERT INTO data_advertenties_prijzen (`ID`, `year`, `rownum`, `status_prijs`, 
    `datum_dag`, `timestamp_dag`) 
VALUES (100,2014,1,1,'2014-01-01',1388534400), 
     (100,2014,2,1,'2014-07-16',1405468800), 
     (100,2014,3,1,'2014-07-26',1406332800) 
ON DUPLICATE KEY UPDATE 
    status_prijs = VALUES(status_prijs), 
    datum_dag = VALUES(datum_dag), 
    timestamp_dag = VALUES(timestamp_dag) 

那裏沒有困難,但...。

我也想在同一個查詢中爲1個值做ON DUPLICATE IGNORE。我也希望在2015年插入一行。例如:(100,2015,1,1,'2015-01-01',1405468800)... 如果已經有一行ID = 100,Year = 2015和rownum = 1,該行的插入必須被忽略。

如何做到這一點?

+0

重複的作品通過檢查主鍵和唯一鍵。因此,您需要將「年份」和「rownum」這兩列設置爲唯一鍵值才能生效。 – 2014-10-01 18:46:23

+0

詹姆斯我做的和第一個查詢工作正常,但我也想插入與2015年(年)的行,但是當已經有一排2015年比只有2015年行不能插入... – 2014-10-01 19:00:17

+0

是否有任何原因不要將年份列設置爲唯一? – 2014-10-01 19:04:12

回答

1

您可以在ON DUPLICATE子句中有條件地更改這些值。

我做了這個實驗,以確保它的工作原理:

INSERT INTO data_advertenties_prijzen VALUES (100, 2014, 1, 7, now(), 1406332800) 
ON DUPLICATE KEY UPDATE 
    status_prijs = IF((id,year,rownum)=(100,2015,1), status_prijs, VALUES(status_prijs)), 
    datum_dag = IF((id,year,rownum)=(100,2015,1), datum_dag, VALUES(datum_dag)), 
    timestamp_dag = IF((id,year,rownum)=(100,2015,1), timestamp_dag, VALUES(timestamp_dag)); 

所以,如果我嘗試插入ID /年/ ROWNUM的具體三人組,它只是使用現有的值,否則,如果是一些其他的ID/year/rownum,它使用INSERT中指定的VALUES。

不幸的是,您必須重複每個要更新的列的表達式。

+0

謝謝比爾,我要去測試它。但是,如果我看一下它,就會發現只有在2015年的時候纔會進行更新。我想爲2014年做插入或更新,如果2015年已經有一排插入了2015年的插入比2015年的行不能插入... – 2014-10-01 18:58:53

+0

請測試它,看看我的解決方案是否滿足您的需求。如果沒有,請編輯上面的問題,並舉例說明你希望它做什麼,以及它做了什麼,這不是你的期望。 – 2014-10-01 19:19:22

+0

作品!!!!!謝謝! – 2014-10-01 19:32:15

相關問題