Как добавить новые и обновить существующие строки в одном запросе?
Я мало что понимаю в SQL, прошу помочь в решении задачи:
Дано:
- таблица table;
- поля id, name, email (id - UNIQUE);
- массив данных, передаваемый из php в запрос.
Задача: написать запрос на добавление несуществующих и обновление существующих записей.
Что-то уже получилось (сам запрос):
INSERT INTO `table` (`id`, `name`, `email`)
VALUES
('1-', 'oleg', 'qqq@mail.ru'),
('2-', 'dima', 'ggg@mail.ru'),
('3-', 'petr', 'mmm@mail.ru'),
('4-', 'anna', 'nnn@mail.ru')
и так далее...
ON DUPLICATE KEY UPDATE `name` = ????? `email` = ??????
Из php:
<?
// $arr - массив данных (порядка 10к строк формата: "('1-', 'oleg', 'qqq@mail.ru')")
$mysqli->query("
INSERT INTO `table` (`id`, `name`, `email`)
VALUES ".implode(",", $arr)."
ON DUPLICATE KEY UPDATE `name` = ????? `email` = ??????
")
?>
Вопрос: что надо писать после "ON DUPLICATE KEY UPDATE"
для обновления существующих строк? Может, есть другие варианты решения задачи?
Источник: Stack Overflow на русском