0

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

例如,“产品”表包括以下内容:

ProductID
ProductName
ProductDesc
CreateDate
Price

HistoricalPrices (json) NEW

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

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

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

4

1 回答 1

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.

例如,要为产品 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 回答