2014-10-01 2 views
3

Ik выполняет запрос, который вставляет некоторые значения в таблицу, если существует комбинация ID, Year, rownum (уникальный индекс), который я делаю для регулярного обновления 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) 

Ничего сложного, но ....

Я также хочу сделать IGNORE ON DUPLICATE для 1 значения в том же запросе. Я также хочу вставить одну строку для 2015 года. Например: (100,2015,1,1, '2015-01-01', 1405468800) ... Если уже есть строка с ID = 100, Year = 2015 и rownum = 1 вставка этой строки должна быть проигнорирована.

Как это сделать?

+0

On Duplicate работает, проверяя первичные и уникальные ключи. Поэтому вам нужно будет установить столбцы 'year' и' rownum' как уникальные ключи для этого. –

+0

Джеймс, я сделал, и первый запрос работает нормально, но я также хочу вставить строку с 2015 (год), но когда уже есть строка с 2015 годом, то не следует вставлять только строку 2015 года ... –

+0

Есть ли какая-либо причина не устанавливать столбец года как уникальный? –

ответ

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

Так что, если я пытаюсь вставить определенное трио ид/год/ROWNUM, он просто использует существующее значение, в противном случае, если это какой-то другой идентификатор/year/rownum, он использует VALUES, которые я указываю в INSERT.

К сожалению, вы должны повторить выражение для каждого столбца, который вы хотите обновить.

+0

Спасибо, Билл, я собираюсь проверить его. Но если я посмотрю на это, почувствую, что обновление выполняется только в год - 2015 год. Я хочу сделать вставку или обновление для 2014 года и вставить на 2015 год, если уже есть строка с 2015 годом чем там строка 2015 года не должна быть вставлена ​​... –

+0

Пожалуйста, проверьте ее и проверьте, делает ли мое решение то, что вам нужно. Если это не так, пожалуйста, отредактируйте свой вопрос выше и покажите пример того, что вы хотите, и что он делает, это не то, что вы ожидаете. –

+0

РАБОТЫ !!!!! Благодаря! –

Смежные вопросы