0

多くの製品を含む MySQL (5.7.10) に「製品」テーブルがあります。JSON データ型を使用して、HistoricalPrices というフィールドを "Products" テーブルに含めたいと考えています。

「Products」テーブルの例には、次のものが含まれます。

ProductID
ProductName
ProductDesc
CreateDate
Price

HistoricalPrices (json) NEW

HistoricalPriceには、json に「CreateDate」キーと「Price」キーを含める必要があるため、複数の価格変更を追加できます。

レポートにこれらの価格が必要なだけなので、(価格履歴ごとに新しい行を追加するのではなく) この方法を好みます。

私が探しているのは、HistoricalPrice フィールド (json) 内に新しい価格変更を追加するための MySQL クエリです。

4

1 に答える 1

0

まず、 HistoricalPrices列を空の JSON 配列で初期化する必要があります。あなたはそれを行うことができますjson_array

UPDATE Products
SET    HistoricalPrices = json_array()
WHERE  HistoricalPrices IS NULL;

新しい製品を挿入するときも同じことを行う必要があります。

INSERT INTO Products (..., HistoricalPrices)
       VALUES (..., json_array());

既存のレコードのHistoricalPricesに価格を追加するには、 を使用できますjson_array_append

たとえば、製品 ID 1 の 2016 年 5 月 1 日の履歴価格 12.34 を追加するには、次のように実行します。

UPDATE Products 
SET    HistoricalPrices =
           json_array_append(HistoricalPrices, 
               '$', json_object('CreateDate', '2016-05-01', 'Price', 23.65)
           )
WHERE  ProductID = 1;

一度に複数の価格を追加できます。

UPDATE Products 
SET    HistoricalPrices =
           json_array_append(HistoricalPrices, 
               '$', json_object('CreateDate', '2016-05-01', 'Price', 12.34),
               '$', json_object('CreateDate', '2016-05-22', 'Price', 12.50)
           )
WHERE  ProductID = 1;

JSON 値の構造は次のようになります。

[
    {
        "CreateDate": "2016-05-01",
        "Price": 12.34
    },
    {
        "CreateDate": "2016-05-22",
        "Price": 12.50
    }
]
于 2016-07-17T13:11:18.283 に答える