2013-05-30 8 views
0

Этот запрос обновляет таблицу БД, используя несколько проверок где. Проблема в том, что я хочу вставить все недостающие строки с идентификаторами консультантов в эту неделю и день.Если существует обновление else insert в соответствии с предложением WHERE

UPDATE agenda 
SET comments = 1 
WHERE term_id = 31 
    AND day IN (1, 3) 
    AND week IN (1, 3, 4) 
    AND consultant_id IN (1, 2, 3) 

Например Существует ряд, имеющий consultant_id=3 and week=1 which has no day=2 в базе данных, я хочу, чтобы вставить новую строку, имеющую consultant_id=3 ,week=1, day=2 and comments=1. В случае, если строка с consultant_id=3 ,week=1, day=2 exist должна просто обновлять комментарии.

Что я пытался использовать ON DUPLICATE KEYthis related ticket Но проблема в том, у меня есть все consultant_id «с, week» с и day «S в массиве, и я должен обновить комментарии на основе этих трех.

Настоящим признателен за любую помощь.

+1

Опубликовать образцы данных и желаемый результат в табличной форме. Это может помочь быстрее ответить на ваш ответ. – peterm

+0

ok @peterm, добавит некоторые табличные данные. – mansoor

+0

... самый простой (для тестирования) при предоставлении как 'CREATE TABLE ....' и 'INSERT INTO ...' операторов – VolkerK

ответ

0

Нужно ли быть в одном запросе?

Решения может быть (псевдокод):

$result = query("UPDATE agenda 
    SET comments = 1 
    WHERE term_id = 31 
     AND day IN (1, 3) 
     AND week IN (1, 3, 4) 
     AND consultant_id IN (1, 2, 3) "); 
if (affected_rows($result) == 0) { 
    // do insert query 
} 
+0

Как я могу узнать, какие строки все еще остаются для вставки? – mansoor

+0

Ну, те, которые не были в вашем предложении 'WHERE'. Трудно сказать, не зная какого-то фона. –

-1

Я думаю, что ваш запрос является правильным, но если вы пример дал отражение таблицы запрос не будет ничего обновлять.

Вы хотите обновить таблицу consultant_id=3 ,week=1, day=2 and comments=1.

В вашем запросе вы ставите это заявление AND day IN (1, 3) , что означает, что вы ограничиваете дни только одним и тремя. Таким образом, day=2 не удовлетворяет условию, что означает, что обновление не будет работать.

Если вы хотите добавить новую запись, используйте вместо этого инструкцию insert.

+0

Собственно, это мой вопрос. Как я могу справиться с этой ситуацией, если записи нет для обновления? – mansoor

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