У меня есть простая база данных MySQL, например:
CREATE TABLE `tab_update` (
`id` int(11) NOT NULL,
`number` int(11) NOT NULL,
`description` varchar(11) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
и некоторые данные внутри:
INSERT INTO `tab_update` (`id`, `number`, `description`) VALUES ('111', '5', 'first value');
INSERT INTO `tab_update` (`id`, `number`, `description`) VALUES ('222', '5', 'first value');
INSERT INTO `tab_update` (`id`, `number`, `description`) VALUES ('333', '5', 'first value');
Что мне нужно:
- вставитьданные в базу данных, если такой же идентификатор еще не существует
или
обновить данные, если выполняются оба приведенных ниже условия:
a) 'id' уже есть в базе данных
b) новое числовое значение больше уже сохраненного числа
То, что я сейчас пытаюсь сделать, это:
INSERT INTO tab_update (id, number, description) VALUES (333, 1, 'second value')
ON DUPLICATE KEY UPDATE number = GREATEST(number, VALUES(number)), description = 'second value'
это работает частично - вставляет данные или обновляет, однако у меня неправильное поведение.Если у нас есть «число = 1» (что меньше 5), это не должно обновлять запись.В данный момент обновляет описание, но не должно.
Не могли бы вы, ребята, помочь мне улучшить этот запрос?
update: я также пытаюсь:
INSERT INTO tab_update (id, number, description) VALUES (333, 6, 'second value')
ON DUPLICATE KEY UPDATE
number = GREATEST(number, VALUES(number)),
description = IF(VALUES(number) > number, VALUES(description), description)
, нопоследняя строка не работает должным образом.