Здравия прочитавшим!
При обновлении данных в базе используется файл *.xls, в нем бывают пустые ячейки в записях - по задумке, надо что бы они не стирали имеющиеся записи в базе данных, если совпали. Делаю стандартное обновление записей путем провоцирования конфликта ключей по полю ID
INSERT INTO `orders` (`id`,`name`,`status`)
VALUES ('1','Иван','OK'),('2','Марья','OK')
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`status` = VALUES(`status`);
Но к сожалению, пустые ячейки стирают соответствующие записи в базе. Все обновляет нормально. Пробовал посредством PHP, но ничего дельного не приходило в голову. Кто сталкивался с подобными случаями, может есть идеи? Спасибо.
в нем бывают пустые ячейки в записях
Что попадает в формируемый запрос в секцию VALUES, если некая ячейка "пустая"? небось пустая строка? т.е. получается нечто вроде
INSERT INTO `orders` (`id`,`name`,`status`)
VALUES ('1','Иван','OK'),('2','Марья','')
Верно?
Если так - то вместо пустой строки формируйте там Null, а в секции ODKU сделайте соотв. обёртку:
INSERT INTO `orders` (`id`,`name`,`status`)
VALUES ('1','Иван','OK'),('2','Марья',Null)
ON DUPLICATE KEY UPDATE
`name` = COALESCE(VALUES(`name`),`name`),
`status` = COALESCE(VALUES(`status`),`status`);
Продвижение своими сайтами как стратегия роста и независимости