我在MySQL(5.7.10)中有一个包含许多产品的“产品”表。 我想在“Products”表中包含一个名为HistoricalPrices的字段,使用JSON数据类型。
对于示例“Products”表包括以下内容:
ProductID
ProductName
ProductDesc
CreateDate
Price
HistoricalPrices (json) NEW
HistoricalPrice 应在json中包含“CreateDate”和“Price”键,这样我就可以添加多个价格变化。
我更喜欢这种方法(而不是每个价格历史记录添加新行),因为我只需要这些报价价格。
我正在寻找的是用于在HistoricalPrice字段(json)中添加新价格变化的MySQL查询
答案 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
}
]