1

Magento store priselistを更新するプロジェクトがあります。更新したい項目のリストがあり、それを 1 つの MySQL クエリで実行したいと考えています (より効率的であると考えて)。価格リストには、SKUと価格が含まれます。

私はこの2つのテーブルを持っています。テーブル 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   |

では、1 つのクエリで 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 を使用して、.Net および MySQL 5.x で C# を使用しています。共有してください. :)

4

1 に答える 1

2

JOIN内で使用できます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反復ごとに 1 つ実行することです。これらの更新は、次の疑似コードのようにトランザクション内に格納されます。

// START TRANSACTION

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

// COMMIT
于 2012-08-05T08:26:28.153 に答える