Как обновить этот Выберите запрос для обновления? - Пока просто зависает - PullRequest
0 голосов
/ 29 мая 2020

В конце концов мне удалось получить то, что я искал, сгруппировав, а затем применив дополнительный фильтр с 'HAVING', что, вероятно, не лучший способ go об этом, но я новичок в SQL, и это только так я мог достичь того, что было после ... это был список «простых» элементов, где «qty» равно 0, а статус диапазона (attribute_id = 168) - Discontinued (ID 96), а «status» (attribute_id = 97) включен (id = 1). Это показано ниже:

SELECT
  `mgic_catalog_product_entity`.`sku` AS `sku`,
  `mgic_catalog_product_entity`.`type_id` AS `type_id`,
  `mgic_cataloginventory_stock_item`.`qty` AS `qty`,
    MAX(Case WHEN `mgic_eav_attribute`.`attribute_id` = 97 THEN `mgic_catalog_product_entity_int`.`value` END) AS status,
     MAX(Case WHEN `mgic_eav_attribute`.`attribute_id` = 168 THEN `mgic_catalog_product_entity_int`.`value` END) AS range_status
FROM (((`mgic_eav_attribute`
  join `mgic_catalog_product_entity_int` on ((`mgic_eav_attribute`.`attribute_id` = `mgic_catalog_product_entity_int`.`attribute_id`)))
  join `mgic_catalog_product_entity` on ((`mgic_catalog_product_entity_int`.`entity_id` = `mgic_catalog_product_entity`.`entity_id`)))
  join `mgic_cataloginventory_stock_item` on ((`mgic_catalog_product_entity_int`.`entity_id` = `mgic_cataloginventory_stock_item`.`product_id`)))
  WHERE `mgic_catalog_product_entity`.`type_id` = 'simple' AND `mgic_cataloginventory_stock_item`.`qty` = 0
GROUP BY `mgic_catalog_product_entity`.`sku`
HAVING  status = 1 and range_status = 96;

Сейчас я пытаюсь изменить это на инструкцию по обновлению, чтобы установить «статус» (attribute_id = 97) на отключенный (id = 2) для списка результатов ниже query.

 update mgic_eav_attribute ea join 
  mgic_catalog_product_entity_int cpei on ea.attribute_id = cpei.attribute_id join
  mgic_catalog_product_entity cpe  on cpei.entity_id = cpe.entity_id join
  mgic_cataloginventory_stock_item cisi  on cpei.entity_id = cisi.product_id
  set cpei.value = 2
  WHERE cpe.type_id = 'simple' AND ((ea.attribute_code = 'status') and
  (cpei.value = 1)) AND cisi.qty = 0 AND EXISTS(
   SELECT
  cpe.sku,
  cpe.type_id,
  cisi.qty,
    MAX(Case WHEN ea.attribute_id = 97 THEN cpei.value END) AS status,
     MAX(Case WHEN ea.attribute_id = 168 THEN cpei.value END) AS range_status
FROM (((`mgic_eav_attribute`
  join `mgic_catalog_product_entity_int` on ((`mgic_eav_attribute`.`attribute_id` = `mgic_catalog_product_entity_int`.`attribute_id`)))
  join `mgic_catalog_product_entity` on ((`mgic_catalog_product_entity_int`.`entity_id` = `mgic_catalog_product_entity`.`entity_id`)))
  join `mgic_cataloginventory_stock_item` on ((`mgic_catalog_product_entity_int`.`entity_id` = `mgic_cataloginventory_stock_item`.`product_id`)))
  WHERE `mgic_catalog_product_entity`.`type_id` = 'simple' AND `mgic_cataloginventory_stock_item`.`qty` = 0
GROUP BY cpei.entity_id
HAVING  status = 1 and range_status = 96);

Кажется, что указанный выше запрос зависает и не выполняется. Кто-нибудь может помочь?

...