You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Magento2如何基于关联查询结果更新catalog_product_entity_int表

解决方案

方案1:无需临时表,直接使用多表关联更新

MySQL原生支持UPDATE多表关联语法,可以直接基于你现有的查询逻辑完成更新,不需要额外创建临时表,写法更简洁高效:

UPDATE catalog_product_entity_int cpei
INNER JOIN catalog_product_relation cpr ON cpr.parent_id = cpei.entity_id
INNER JOIN catalog_product_entity cpe ON cpe.entity_id = cpr.parent_id
INNER JOIN catalog_product_flat_1 cpf1 ON cpf1.entity_id = cpr.child_id
SET cpei.value = 1
WHERE 
    cpei.attribute_id = '579'
    AND cpe.type_id = 'configurable'
    AND cpf1.special_price > 1
GROUP BY cpr.parent_id;

注意:执行更新操作前建议先把UPDATE语句替换为SELECT COUNT(*)校验符合更新条件的行数是否符合预期,同时做好相关表的数据备份,避免误操作

方案2:使用临时表的实现方式

如果需要先把筛选结果落地校验、或者需要多次使用筛选结果,可以选择临时表方案,步骤如下:

  • 第一步:创建临时表存储符合条件的父商品ID
CREATE TEMPORARY TABLE temp_valid_parent_ids (
    parent_id INT PRIMARY KEY
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 第二步:把符合条件的parent_id写入临时表
INSERT INTO temp_valid_parent_ids (parent_id)
SELECT DISTINCT cpr.parent_id
FROM catalog_product_entity cpe
LEFT JOIN catalog_product_relation cpr ON cpe.entity_id = cpr.parent_id  
LEFT JOIN catalog_product_flat_1 cpf1 ON cpf1.entity_id = cpr.child_id
WHERE cpe.type_id = 'configurable'
AND cpf1.special_price > 1
GROUP BY cpr.parent_id;
  • 第三步:基于临时表执行更新
UPDATE catalog_product_entity_int cpei
INNER JOIN temp_valid_parent_ids tvpi ON tvpi.parent_id = cpei.entity_id
SET cpei.value = 1
WHERE cpei.attribute_id = '579';
  • 第四步:(可选)用完后可手动删除临时表,临时表也会在当前数据库连接断开后自动删除
DROP TEMPORARY TABLE IF EXISTS temp_valid_parent_ids;

内容的提问来源于stack exchange,提问作者Martin Leeney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:54:01