Обновление опций в OpenCart (OcStore)

Ответить
paco
Сообщения:145
Зарегистрирован:20 авг 2019 16:33

23 сен 2019 15:46

Здраствуйте, помогите, пожалуйста. модифицировать SQL для выгрузки опций с некоторыми изменениями по сравнению со стандартной моделью.
Я добавил в таблицу oc_product_option_value дополнительное поле "model" (varchar(64)) и внес изменения в движок, которые позволяют использовать префикс цены не только "+ / -", но и оператор "=" (равно).

нашел следующий SLQ запрос у Вас в документации:

Код: Выделить всё

UPDATE oc_product_option_value pov
INNER JOIN etrade_product_attribute_temp pa ON pa.product_id = pov.product_id AND pov.product_option_id = pa.product_option_id AND pov.option_id = pa.option_id AND
      pov.option_value_id = pa.option_value_id
INNER JOIN (SELECT uuid, price FROM etrade_product_temp WHERE type_id=1) p ON p.uuid = pa.product_uuid
INNER JOIN (SELECT uuid_parent, price FROM etrade_product_temp WHERE type_id=2) p_option ON p_option.uuid_parent = p.uuid
SET pov.price = p_option.price - p.price;;;
решил добавить цену, как в товаре-опции без вычетания, а также, дополнительно добавил префикс и заполнил модель из MPN товара:

Код: Выделить всё

UPDATE oc_product_option_value pov
INNER JOIN etrade_product_attribute_temp pa ON pa.product_id = pov.product_id AND pov.product_option_id = pa.product_option_id AND pov.option_id = pa.option_id AND
      pov.option_value_id = pa.option_value_id
INNER JOIN (SELECT uuid, price, mpn FROM etrade_product_temp WHERE type_id=1) p ON p.uuid = pa.product_uuid
INNER JOIN (SELECT uuid_parent, price FROM etrade_product_temp WHERE type_id=2) p_option ON p_option.uuid_parent = p.uuid
SET pov.price = p_option.price, pov.price_prefix = '=', pov.model = p.mpn ;;;
Но к сожалению, данный запрос не дал результата.
Аватара пользователя
TechAdmin
Администратор
Сообщения:4286
Зарегистрирован:27 авг 2008 14:30

23 сен 2019 17:18

Здравствуйте.
SQL запрос добавили в шаблон выгрузки во вкладку "После основного обновления"?
Поле pov.model требуется обновлять на основании артикула от гл. товара или от товара опции?
С уважением, поддержка ElbuzGroup.
paco
Сообщения:145
Зарегистрирован:20 авг 2019 16:33

24 сен 2019 10:29

вставил запрос во вкладку "после обновления". артикул нужен от соответствующего товара-опции
Аватара пользователя
TechAdmin
Администратор
Сообщения:4286
Зарегистрирован:27 авг 2008 14:30

24 сен 2019 10:51

Тогда используйте такой SQL запрос

Код: Выделить всё

UPDATE oc_product_option_value pov
INNER JOIN etrade_product_attribute_temp pa ON pa.product_id = pov.product_id AND pov.product_option_id = pa.product_option_id AND pov.option_id = pa.option_id AND
      pov.option_value_id = pa.option_value_id
INNER JOIN (SELECT uuid, price, mpn FROM etrade_product_temp WHERE type_id=1) p ON p.uuid = pa.product_uuid
INNER JOIN (SELECT uuid_parent, price, mpn FROM etrade_product_temp WHERE type_id=2) p_option ON p_option.uuid_parent = p.uuid
SET pov.price = p_option.price, pov.price_prefix = '=', pov.model = p_option.mpn ;;;
С уважением, поддержка ElbuzGroup.
paco
Сообщения:145
Зарегистрирован:20 авг 2019 16:33

13 ноя 2019 16:34

при обновлении с помощью SQL запроса в процессе экспорта возникает ошибка:

Код: Выделить всё

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Unknown column 'pa.option_value_id' in 'on clause'' in /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php:814 Stack trace: #0 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(814): mysqli->query('UPDATE oc_produ...', 1) #1 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(857): sql_query_run('UPDATE oc_produ...', 1) #2 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(713): run_sql_commands('VVBEQVRFIG9jX3B...', 'SELECT', Object(mysqli), 1, '', '0') #3 {main} thrown in /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php on line 814
Аватара пользователя
TechAdmin
Администратор
Сообщения:4286
Зарегистрирован:27 авг 2008 14:30

13 ноя 2019 18:50

Попробуйте эту версию

Код: Выделить всё

UPDATE oc_product_option_value pov
INNER JOIN etrade_product_attribute_temp pa ON pa.product_id = pov.product_id AND pov.product_option_id = pa.product_option_id AND pov.option_id = pa.option_id AND
      pov.option_value_id = pa.product_option_value_id 
INNER JOIN (SELECT uuid, price, mpn FROM etrade_product_temp WHERE type_id=1) p ON p.uuid = pa.product_uuid
INNER JOIN (SELECT uuid_parent, price, mpn FROM etrade_product_temp WHERE type_id=2) p_option ON p_option.uuid_parent = p.uuid
SET pov.price = p_option.price, pov.price_prefix = '=', pov.model = p_option.mpn;;;
С уважением, поддержка ElbuzGroup.
paco
Сообщения:145
Зарегистрирован:20 авг 2019 16:33

14 ноя 2019 14:40

новый запрос выдает следующее:

Код: Выделить всё

Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Unknown column 'pa.product_option_id' in 'on clause'' in /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php:814 Stack trace: #0 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(814): mysqli->query('UPDATE oc_produ...', 1) #1 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(857): sql_query_run('UPDATE oc_produ...', 1) #2 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(713): run_sql_commands('VVBEQVRFIG9jX3B...', 'SELECT', Object(mysqli), 1, '', '0') #3 {main} thrown in /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php on line 814 24567Error: Unknown error type File: /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php Message: Uncaught exception 'mysqli_sql_exception' with message 'Unknown column 'pa.product_option_id' in 'on clause'' in /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php:814 Stack trace: #0 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(814): mysqli->query('UPDATE oc_produ...', 1) #1 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(857): sql_query_run('UPDATE oc_produ...', 1) #2 /home/testdom/public_html/tunnel2sync/etrade_http_tunnel.php(713): run_sql_commands('VVBEQVRFIG9jX3B...', 'SELECT', Object(mysqli), 1, '', '0') #3 {main} thrown Line: 814Выгрузка прервана!
Аватара пользователя
TechAdmin
Администратор
Сообщения:4286
Зарегистрирован:27 авг 2008 14:30

14 ноя 2019 16:17

SQL запрос добавили в шаблон выгрузки во вкладку "После основного обновления"?
При обновлении сайта активны флаги "Атрибуты" и "Опции"?
С уважением, поддержка ElbuzGroup.
paco
Сообщения:145
Зарегистрирован:20 авг 2019 16:33

15 ноя 2019 15:12

TechAdmin писал(а):
14 ноя 2019 16:17
SQL запрос добавили в шаблон выгрузки во вкладку "После основного обновления"?
При обновлении сайта активны флаги "Атрибуты" и "Опции"?
спасибо, Вы правы - забыл указать выгрузку опций в настройках экспорта.

Запрос при эскпорте выполняется без ошибок в логах. но два дополнительных поля не обновляет (pov.price_prefix = '=', pov.sku = p_option.mpn):
UPDATE oc_product_option_value pov
INNER JOIN etrade_product_attribute_temp pa ON pa.product_id = pov.product_id AND pov.product_option_id = pa.product_option_id AND pov.option_id = pa.option_id AND
pov.option_value_id = pa.product_option_value_id
INNER JOIN (SELECT uuid, price, mpn FROM etrade_product_temp WHERE type_id=1) p ON p.uuid = pa.product_uuid
INNER JOIN (SELECT uuid_parent, price, mpn FROM etrade_product_temp WHERE type_id=2) p_option ON p_option.uuid_parent = p.uuid
SET pov.price = p_option.price, pov.price_prefix = '=', pov.sku = p_option.mpn;;;
paco
Сообщения:145
Зарегистрирован:20 авг 2019 16:33

05 дек 2019 15:15

сколько будет стоить доделать Ваш SQL, чтобы он таки заработал?
нужно чтобы вместе с опцией в opencart добавлялся артикул производителя соответсвующей опции из этрейда, и вместо символа "+" ставился символ = "=" (равно).

К примеру, вот как нужно, чтобы выглядели опции:
(добавлен артикул опции из etrade, и + заменены на =, цена и количество = те же данные опции из etrade)

Код: Выделить всё

INSERT INTO `oc_product_option_value` (`product_option_value_id`, `product_option_id`, `product_id`, `option_id`, `option_value_id`, `quantity`, `subtract`, `price`, `price_prefix`, `points`, `points_prefix`, `weight`, `weight_prefix`, `description`, `sku`, `upc`, `model`, `reward`, `reward_prefix`, `default_select`) VALUES
(9883, 2136, 16185, 13, 58, 99, 0, '475.0000', '=', 0, '=', '0.00', '=', '', 'MW-Bumper-5KG', '', '', 0, '', 0),
(9884, 2136, 16185, 13, 59, 99, 0, '950.0000', '=', 0, '=', '0.00', '=', '', 'MW-Bumper-10KG', '', '', 0, '', 0),
(9885, 2136, 16185, 13, 60, 99, 0, '1425.0000', '=', 0, '=', '0.00', '=', '', 'MW-Bumper-15KG', '', '', 0, '', 0),
(9886, 2136, 16185, 13, 61, 99, 0, '1900.0000', '=', 0, =', '0.00', '=', '', 'MW-Bumper-20KG', '', '', 0, '', 0);
Вот сама структура измененной таблицы:

Код: Выделить всё

CREATE TABLE `oc_product_option_value` (
  `product_option_value_id` int(11) NOT NULL,
  `product_option_id` int(11) NOT NULL,
  `product_id` int(11) NOT NULL,
  `option_id` int(11) NOT NULL,
  `option_value_id` int(11) NOT NULL,
  `quantity` int(3) NOT NULL,
  `subtract` tinyint(1) NOT NULL,
  `price` decimal(15,4) NOT NULL,
  `price_prefix` varchar(1) NOT NULL,
  `points` int(8) NOT NULL,
  `points_prefix` varchar(1) NOT NULL,
  `weight` decimal(15,2) NOT NULL,
  `weight_prefix` varchar(1) NOT NULL,
  `description` text NOT NULL,
  `sku` varchar(64) NOT NULL,
  `upc` varchar(12) NOT NULL,
  `model` varchar(64) NOT NULL,
  `reward` int(8) NOT NULL,
  `reward_prefix` varchar(1) NOT NULL,
  `default_select` tinyint(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Ответить

Вернуться в «SQL запросы для обновления сайта из E-Trade Jumper»