INSERT UPDATE в одном флаконе. Часть 2.

INSERT UPDATE в одном флаконе. Часть 2.

В части 1 я уже описывал как делать 1 запрос вместо двух используя уникальный ключ, но что делать, когда такой ключ невозможен? Решение – это составной уникальный ключ из полей таблицы.

Например есть некая таблица, где хранятся значения дополнительных параметров для товара, в таблице tFieldValue есть поля:

valueId

value

fieldId – ключ, указывающий значение какого параметра храним

goodId – ключ, указывающий на товар.

Далее при сохранении карточки товара например у нас должны сохраняться и дополнительные параметры, т е надо сначало таблице tFieldValue проверить есть ли там значение для поля fieldId у товара goodId, если есть, то обновить поле value, если нет то добавить новую запись.

Чтобы решить эту задачу в 1 запрос в таблице tFieldValue из полей fieldId и goodId делаем 1 составной уникальный ключ, в phpmyadmin в структуре таблице выделяем эти два поля галочкой и нажимаем кнопку с уникальным ключом, либо запросом:

ALTER TABLE ` tFieldValue` ADD UNIQUE (

`fieldId` ,
`goodId`
);

Далее работаем с этой таблице как описано в части 1:

INSERT INTO `tFieldValue` (value,fieldId,goodId ) VALUES (‘8′, 120,1)
ON DUPLICATE KEY UPDATE value=’8′

Mysql будет искать запись в таблице tFieldValue с полем fieldId = 120 ,goodId=1, если найдет, то обновит value, если не найдет, тогда добавит новую запись.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *