2016-07-17 15 views
0

多くの製品を含むMySQL(5.7.10)の「製品」テーブルがあります。 "Products"テーブルに、JSONデータ型を使用してHistoricalPricesというフィールドを追加します。例えばjsonデータ型を実装して価格履歴を格納する方法

「製品」テーブルには次のものが含まれます。

ProductID 
ProductName 
ProductDesc 
CreateDate 
Price 

HistoricalPrices (json) NEW 

HistoricalPriceはJSONで「CREATEDATE」と「価格」キーを含める必要がありますので、私は価格の複数の変更を加えることができます。

私は報告するためにこれらの価格が必要なので、(価格履歴ごとに新しい行を追加するのではなく)この方法をお勧めします。

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

答えて

0

あなたは、空のJSON配列でHistoricalPrices列をinitilialisingことから始めなければなりません。あなたが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', 12.34), 
       '$', json_object('CreateDate', '2016-05-22', 'Price', 12.50) 
      ) 
WHERE ProductID = 1; 

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

複数の価格が一度に追加することができます

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

[ 
    { 
     "CreateDate": "2016-05-01", 
     "Price": 12.34 
    }, 
    { 
     "CreateDate": "2016-05-22", 
     "Price": 12.50 
    } 
] 
+0

は良いtrincotを見えます!ありがとう。それを試してここで更新します。 – Dror

+0

json配列のHistoricalPrices内で特定のproductIDを検索することは可能でしょうか?日付範囲内の特定の価格を検索するのと同じですか? – Dror

+0

それは本当に別の質問です。それについて新しい質問を投稿してもいいですか(この回答があなたのために働くことを確認した後)? – trincot

関連する問題