2012-08-05 23 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