1

我有一个更新 Magento 商店priselist的项目。我有我想要更新的项目列表,我想用一个 MySQL 查询来完成它(通过思考,它更有效)。priselist包括sku 和价格。

我有这两张桌子。从表 1中,我使用sku更新表 2中的,即当*entity_id*在两个表中相等且attribute_id 为“64”时商品的价格。

表格1

product_entity

entity_id  |  sku
        1  |   p1   
        2  |   p2
        3  |   p3

表 2

product_entity_decimal

entity_id  |  attribute_id  |  value   |
        1  |            64  |      5   |
        1  |            65  |   NULL   |
        1  |            66  |   NULL   |
        2  |            64  |      7   |
        2  |            65  |   NULL   |
        2  |            66  |   NULL   |
        3  |            64  |      1   |
        3  |            65  |   NULL   |
        3  |            66  |   NULL   |

那么,如何通过一个查询将 p1 奖品更新为 6,将 p3 奖品更新为 2。

我尝试了这个查询,但它没有用......

UPDATE product_entity, product_entity_decimal SET product_entity_decimal.value =
CASE 
    WHEN product_entity.entity_id = product_entity_decimal.entity_id AND product_entity_decimal.attribute_id =  '64' AND product_entity.sku =  'p1' THEN '6'
    WHEN product_entity.entity_id = product_entity_decimal.entity_id AND product_entity_decimal.attribute_id =  '64' AND product_entity.sku =  'p1' THEN '2'
    ELSE value
END

对于我的项目,我通过使用 MySql.Data.MySqlClient 将 C# 与 .Net 和 MySQL 5.x 一起使用。如果有请分享它,也许有更好的方法来更新 MySQL 数据库中 3000 项的列表。:)

4

1 回答 1

2

您可以使用JOINinside UPDATE

UPDATE product_entity_decimal a
JOIN   product_entity b ON a.entity_id = b.entity_id AND b.sku IN ('p1', 'p3')
SET    a.value = CASE b.sku WHEN 'p1' THEN 6 WHEN 'p2' THEN 2 END
WHERE  a.attribute_id = 64

如果您有要更新的 3000 个项目的列表,也许最好的方法是遍历一个数组并在UPDATE每次迭代时执行一个。这些更新将包含在事务中,例如以下伪代码:

// START TRANSACTION

// For Each Value in array
    // Execute UPDATE statement

// COMMIT
于 2012-08-05T08:26:28.153 回答