如何实现json数据类型来存储价格历史记录

时间:2016-07-17 11:43:49

标签: mysql mysql-json

我在MySQL(5.7.10)中有一个包含许多产品的“产品”表。 我想在“Products”表中包含一个名为HistoricalPrices的字段,使用JSON数据类型。

对于示例“Products”表包括以下内容:

ProductID
ProductName
ProductDesc
CreateDate
Price

HistoricalPrices (json) NEW

HistoricalPrice 应在json中包含“CreateDate”和“Price”键,这样我就可以添加多个价格变化。

我更喜欢这种方法(而不是每个价格历史记录添加新行),因为我只需要这些报价价格。

我正在寻找的是用于在HistoricalPrice字段(json)中添加新价格变化的MySQL查询

1 个答案:

答案 0 :(得分:0)

首先应该使用空的JSON数组初始化 HistoricalPrices 列。您可以使用json_array

执行此操作
UPDATE Products
SET    HistoricalPrices = json_array()
WHERE  HistoricalPrices IS NULL;

插入新产品时应该这样做:

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

要在现有记录中为 HistoricalPrices 添加价格,您可以使用json_array_append

例如,要在2016-05-01附加产品ID 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
    }
]