Я думаю, что это должно сделать это, но я не проверял это.
Основная процедура - создать временную таблицу, которая содержит суммированные значения для тех объектов, которые вам интересны, а затем обновить соответствующий атрибутстроки с этими значениями.
Обратите внимание, что php здесь не нужен, только SQL.Конечно, вы можете захотеть использовать php для выдачи запроса.
UPDATE
catalog_product_entity_decimal,
(SELECT entity_id, SUM(value) AS summedvalue FROM catalog_product_entity_decimal as cped
WHERE attribute_id IN (145, 146)
AND EXISTS (SELECT 1 FROM catalog_product_entity_decimal WHERE entity_id=cped.entity_id and attribute_id=141)
GROUP BY entity_id
) AS sums
SET catalog_product_entity_decimal.value = sums.summedvalue
WHERE catalog_product_entity_decimal.entity_id=sums.entity_id
AND catalog_product_entity_decimal.attribute_id=141;
Это создает промежуточную таблицу sums
, которая выглядит следующим образом (на основе данных в скриншоте таблицы):
entity_id | summedvalue
1 | 12
2 | 0
Если есть entity_id без строки с attribute_id = 141, у этого entity_id не будет строки в этой таблице sums
- это обеспечивается условием EXISTS ().
Затем мы обновляемтаблицу catalog_product_entity_decimal
(сокращенно CPED), соединяя ее с sums
для entity_id.
CPED.entity_id | CPED.attribute_id | sums.entity_id | sums.summedvalue
1 | 145 | 1 | 12
2 | 145 | 2 | 0
SET CPED.value = sums.summedvalue
выполняет фактическую настройку.