Сообщение #5 toxxxa » 22.12.2016, 21:52
Скорость такая дохлая, потому что на импортирование каждого товара идёт минимум два запроса к БД (SELECT и UPDATE), а если в импортируемом файле указан бренд, категория или картинка - намного больше. В общем случае так конечно проще, но когда нужно просто обновить цены - это расточительно. Еще одна проблема - в импортируемом файле могут быть лишние товары, которых нет на сайте. Но из-за обязательного поля "название товара" стандартный импорт будет пытаться создать эти товары вместо того, чтоб их просто пропустить.
Я сейчас сяду писать свой метод для обновления цен:
1. Парсим первые 500 товаров, запоминаем их SKU
2. Узнаем у БД id этих товаров
Код: Выделить всё
SELECT `id`, `sku` FROM `s_variants` WHERE `sku` IN (список SKU через запятую)
3. Формируем запрос на обновление цен
Код: Выделить всё
INSERT INTO `s_variants` (`id`, `price`) VALUES
(..,..),
(..,..),
(..,..),
ON DUPLICATE KEY UPDATE `price` = VALUES(`price`)
Ну, это в общем виде. Зато 20 000 товаров = 80 запросов к БД и к памяти запросы минимальные.
И полезно тем, у кого магазин на шаред-хостингах, у которых обычно лимит на 3-5 тыс обращений к БД в час.
Скорость такая дохлая, потому что на импортирование каждого товара идёт минимум два запроса к БД (SELECT и UPDATE), а если в импортируемом файле указан бренд, категория или картинка - намного больше. В общем случае так конечно проще, но когда нужно просто обновить цены - это расточительно. Еще одна проблема - в импортируемом файле могут быть лишние товары, которых нет на сайте. Но из-за обязательного поля "название товара" стандартный импорт будет пытаться создать эти товары вместо того, чтоб их просто пропустить.
Я сейчас сяду писать свой метод для обновления цен:
1. Парсим первые 500 товаров, запоминаем их SKU
2. Узнаем у БД id этих товаров
[code]SELECT `id`, `sku` FROM `s_variants` WHERE `sku` IN (список SKU через запятую)[/code]
3. Формируем запрос на обновление цен
[code]INSERT INTO `s_variants` (`id`, `price`) VALUES
(..,..),
(..,..),
(..,..),
ON DUPLICATE KEY UPDATE `price` = VALUES(`price`)[/code]
Ну, это в общем виде. Зато 20 000 товаров = 80 запросов к БД и к памяти запросы минимальные.
И полезно тем, у кого магазин на шаред-хостингах, у которых обычно лимит на 3-5 тыс обращений к БД в час.
Онлайн-калькуляторы для типографий и РА: http://calc.in.ua