在mySQL中将Magento属性值从一行复制到另一行

时间:2014-07-21 20:41:23

标签: mysql sql magento

我想基于ID将magento属性的值从一行复制到同一个表中的另一行,但前提是目标列为空。

我有一个值attribute_id = 99这是价格,例如19.99,我想将这个值复制到一个新属性(这是attribute_id = 1030)我的测试查询下面工作正常并更新entity_id = 1030的行(这是每个产品ID)我不希望手动更改该数字我希望查询更新所有没有在attribute_id = 1013中使用attribute_id = 99的值的产品

UPDATE catalog_product_entity_decimal 
SET value = (select value from (select value from catalog_product_entity_decimal where attribute_id = 99 AND entity_id = 1030) AS x)
WHERE attribute_id = 1013 AND attribute_id IS NULL AND entity_id = 1030;

实际上我希望entity_id = xxxx匹配,因为它可以通过表更新所有项目。例如1030,1031,1032 ... 1099 ... 15001

1 个答案:

答案 0 :(得分:0)

我在这里假设了几件事。如果它们不同,并导致我的解决方案不起作用,请通过评论告诉我:

  1. catalog_product_entity_decimal的结构如下:

    value_id(自动增量,主键),entity_type_id,attribute_id,entity_id,value

  2. (attribute_id,entity_id)有一个唯一约束。即同一个attribute_id,entity_id对只能存在一次。

  3. 你想要的是一个insert ignore语句:

    INSERT IGNORE INTO catalog_product_entity_decimal (entity_id, attribute_id, value)
    SELECT entity_id, :new_attribute_id as `attribute_id`, value
    FROM catalog_product_entity_decimal
    WHERE entity_id = :entity_id
    AND attribute_id = :attibute_id
    

    其中:new_attribute_id == 1030和:attribute_id == 99,而entity_id指的是您要为其创建新属性的任何产品实体。

    另外,(这超出了问题的范围)我建议你更新catalog_product_entity中为你要添加属性的所有产品的“updated_at”列,因为如果你通过magento进行更新过程orm,它会自动记录catalog_product实例的更新时间。

    你可以用非常简单的方式做到这一点。

    创建一个程序:

    1. 将在attribute_id = 1030上过滤的catalog_product_entity_decimal表转储到临时表(temp1

    2. 运行此回答中提供的插入查询

    3. 将catalog_product_entity_decimal表转储到第二个临时表(temp2

      更新catalog_product_entity p 在temp2.​​entity_id = p.entity_id上加入temp2 在temp1.entity_id = p.entity_id上LEFT JOIN temp1 SET p.updated_at = NOW() 其中temp1.entity_id为null