2015-06-28 2 views
-1

Я хотел бы сделать что-то вроде этого (обновленных значения должно отличаться от вставленного значения ):INSERT ON DUPLICATE KEY UPDATE значение отличается от вставки

"INSERT INTO notification_chat_counts (uid,group_id,count) 
          VALUES 
            (",$uid,",",$groupId,",1) 
          ON DUPLICATE KEY UPDATE 
            (count = count +1)" 
+0

В чем проблема/ошибка? –

+0

Мне нужно написать после обновления, значение столбца, которое я хочу поставить в случае дублирования, значение из вставки, которое есть в моем случае. Я просто хочу обновить счет с другим значением, чем я положил в insert, это возможное? Я не думаю, что это возможно, как я его написал (синтаксис мудрый) –

ответ

1

Конечно, это возможное. Даже MySQL manual имеет пример вставки другого значения, что значения, которые бы получили обновление:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

Для примера, правильный синтаксис запроса будет:

$query = "INSERT INTO notification_chat_counts (uid,group_id,count) 
      VALUES (",$uid,",",$groupId,",1) 
      ON DUPLICATE KEY UPDATE count=count+1" 

Однако для этого заявление на работу у вас должен быть индекс типа UNIQUE, определенный для этой таблицы, так что MySQL может решить, существует ли такая строка в таблице или нет.

Также помните, что вставка значений в SQL-запрос, подобный этому, является опасным и не рекомендуется. Для этого вы должны использовать подготовленные инструкции.

+1

Но обратите внимание: если у вас есть суррогатный автоинкрементный идентификатор, 'ON DUPLICATE KEY UPDATE' будет потреблять один из этих идентификаторов, что приведет к пробелам для следующего * реального * insert! – dognose

+0

Да, это правда (и упоминается в ссылке на странице руководства). Во всяком случае, автоинкремент не гарантируется без пробелов (удаляет, вставляет с указанным вручную id, ...). – Marki555

+0

Да, как дополнение к ОП. Пример того, что я имел в виду: http://sqlfiddle.com/#!9/5868a2/1 – dognose

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