MySQL -在JSON数组中增加值

mrfwxfqh  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(165)

我有一个存储user_id和product_ids的MySQL表,其中product_ids列存储一个JSON数组,数组中包含多个产品ID
| 用户ID|产品ID|
| --------------|--------------|
| 一百零二|[2019 - 05 - 15 00:01:00]|
| 五十四|[2019 - 05 - 15 00:05:00]|
此表包含数千行。我需要一个查询来将product_ids列中存储的所有产品ID增加1127。因此,我想要的输出将如下所示:
| 用户ID|产品ID|
| --------------|--------------|
| 一百零二|[1128,1185,1225,1190,1172,1169,1239,1242]|
| 五十四|[1185,1190,1223,1172,1155,1174,1342]|
我可以写一个脚本,它可以遍历每一行,从JSON列中选择product_ids,手动递增product_ids,然后为当前行更新它,但这将是一个非常耗时的工作。
我想知道这是否可以用一个查询对所有行完成。
注:这对我来说只是一次活动。

soat7uwm

soat7uwm1#

你真的应该规范化你的数据,并有一个user_products表;那么这个任务将是微不足道的。
假设你使用的是MySQL 8,你可以用JSON_TABLEJSON_ARRAYAGG做到这一点:

UPDATE data
JOIN (
  SELECT user_id, JSON_ARRAYAGG(pid+1127) AS product_ids
  FROM data
  JOIN JSON_TABLE(data.product_ids,
                  '$[*]' COLUMNS(
                    pid INT PATH '$'
                    )
                 ) jt
  GROUP BY user_id
) ud ON ud.user_id = data.user_id
SET data.product_ids = ud.product_ids
;
SELECT *
FROM data

输出:

user_id product_ids
102     [1128, 1185, 1225, 1190, 1172, 1169, 1239, 1242]
54      [1185, 1190, 1223, 1172, 1155, 1174, 1342]

db-fiddle上的演示

相关问题