2012-08-05 50 views
1

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

我有这两个表。从表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 

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

回答

2

您可以使用一个JOINUPDATE

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 
+0

谢谢你有用,但我有一个问题。是不是需要更多的服务器端资源才能执行多个SQL查询?我的项目的目的是为了减轻主机方面的负担。我在“内存= 1 /计算”的基础上得到了其他想法。这意味着在导出数据时我会保留entity_id,然后它将在一个表中简单更新,但又是一个或多个查询,我仍然认为一个查询比许多查询更好。 – 2012-08-05 19:15:28