-2

私は次のMysql構造を持っています:

  • jss_products
    • productID
    • price1
  • jss_extrafields_values
    • exvalID
    • productID
    • extraFieldID
  • jss_extrafields_prices
    • exvalID
    • price1

各製品にはいくつかのエクストラフィールドがあります。私は興味を持っているextraFieldID = 1

の値を使用して、price1すべてを更新したいと思います。次のクエリがありますが、すべてのエントリではなく、の製品ごとの最初のエントリのみが更新されます。jss_extrafields_pricesjss_products.price1jss_extrafields_price

jss_extrafields_pricesの価格を正規化して、の価格を持つ製品の20.00場合、の関連する各エントリがにjss_extrafields_pricesなるようにしようとしていCURRENTPRICE - 20ます。

それは理にかなっていますか?これが私がこれまでに持っているものです

UPDATE jss_extrafields_prices AS JEP
INNER JOIN (
    SELECT P.productID, P.price1 AS P1, EP.price1, EP.exvalID FROM jss_products AS P
    INNER JOIN jss_extrafields_values AS EV
    ON P.productID = EV.productID
    INNER JOIN jss_extrafields_prices AS EP
    ON EV.exvalID = EP.exvalID
    WHERE EV.extraFieldID = 1
    GROUP BY P.productID
    ORDER BY P.productID DESC, EP.price1 DESC
) AS X
ON JEP.exvalID = X.exvalID
SET JEP.price1 = JEP.price1 - X.P1

内部クエリが次のようなものを返すことを期待します: productID = 1090 P1 = 20.8333333 price1 = 20.8333333 exvalID = 3236

1090productIDには3つの価格設定オプションがあり、その基本価格は、現在の価格から基本価格を引いたものになるように、20.83333一致するすべての製品を更新したいと思います。jss_extrafields_prices

それは役に立ちますか?

4

1 に答える 1

0

以前はローカライズされすぎていると分類されていた情報の一部を取り除き、これはINNERJOINを使用したUPDATEに簡略化されました。

UPDATE jss_extrafields_prices 
INNER JOIN (
    SELECT P.productID, P.price1 AS baseprice, JEP.price1 AS optionprice, JEP.exvalID, (JEP.price1 - P.price1) AS adjustedprice FROM jss_products AS P
    INNER JOIN jss_extrafields_values AS JEV
    ON P.productID = JEV.productID
    INNER JOIN jss_extrafields_prices AS JEP
    ON JEV.exvalID = JEP.exvalID
    WHERE JEV.extraFieldID = 1
) AS X
ON jss_extrafields_prices.exvalID = X.exvalID
SET jss_extrafields_prices.price1 = X.adjustedprice
于 2013-01-23T10:02:17.090 に答える