Добрый день!
Коротко о системе:
laravel: 5.5
PHP: 7.0
Модуль: Apache-PHP-7
БД: MySql-5.7
ОС: Windows/Linux (тестовый/боевой)
Задача такая.
Подгружается прайс с тысячами позиций, которые необходимо забить в БД, артикул является уникальным ключем.
При первом проходе файла (уникальных артикулов) все проходит хорошо, но дело в том, что данные могут из файла в файл (временами) повторяться.
Задача заключается в том, что бы не делать тысячи запросов к БД, а одним запросом записать только уникальные данные из массива.
При обычной вставке типа
Goods::insert($dbArr);
будет возвращена ошибка т.к. некоторые ключи могут быть не уникальны.
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '111120150182' for key 'goods_article_unique' (SQL: insert into `goods` (`article`,`collection`, `description`, `imageN`, `name`, `price`, `size`) values (************))
Вариант с получением всей коллекции из БД не совсем верен т.к. в БД может быть большое количество записей, сейчас около 10к может быть и и 50к товаров, а это надо понимать не корректно выбирать 50к строк из БД.
Помогите пожалуйста решить данную задачу.
как то так. если не нужно обновлять значения, то вы можете обновлять поле updated_at
function insertOrUpdate($table, array $rows)
{
$first = reset($rows);
$columns = implode(',',
array_map(function ($value) {
return "$value";
}, array_keys($first))
);
$values = implode(',', array_map(function ($row) {
return '(' . implode(',',
array_map(function ($value) {
return '"' . str_replace('"', '""', $value) . '"';
}, $row)
) . ')';
}, $rows)
);
$updates = implode(',',
array_map(function ($value) {
return "$value = VALUES($value)";
}, array_keys($first))
);
$sql = "INSERT INTO {$table} ({$columns}) VALUES {$values} ON DUPLICATE KEY UPDATE {$updates}";
return \DB::statement($sql);
}
что-то вроде
return "updated_at = now()";
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Сайт на WordPress, задача была задать разные стили элементам взависимостри от времени суток и дня недели (с этим справился), вопрос вот в чем