目前,使用 MySQL JSON 函数查找数值很复杂。在像下面这样的 JSON 中,它会很简单:
{"id": "222", "active": 1}
有很多方法可以获取您需要的内容,我介绍一种可以为您提供想法的方法(修改所有必要的内容):
UPDATE `objects`
SET `objects`.`content` =
JSON_REPLACE(`objects`.`content`, CONCAT('$.data',
(SELECT
JSON_UNQUOTE(
REPLACE(
JSON_SEARCH(
REPLACE(
REPLACE(
REPLACE(
`der`.`content` ->> '$.data[*].id',
', ',
'","'),
']',
'"]'),
'[',
'["'),
'one',
'222'),
'$',
'')
)
FROM (SELECT `objects`.`content`
FROM `objects`
WHERE `objects`.`id` = 7383) `der`
), '.active'), 0)
WHERE `objects`.`id` = 7383;
当心可能的性能问题。
See .
在最新版本的MySQL(>= 8.0.4)中,这句话会简单得多:
UPDATE `objects`
INNER JOIN JSON_TABLE(
`objects`.`content`,
'$.data[*]' COLUMNS(
`rowid` FOR ORDINALITY,
`id` INT PATH '$.id'
)
) `der` ON `der`.`id` = 222
SET `objects`.`content` =
JSON_REPLACE(
`objects`.`content`,
CONCAT('$.data[', `der`.`rowid` - 1, '].active'),
0)
WHERE
`objects`.`id` = 7383;
See 数据库小提琴 https://www.db-fiddle.com/f/5gwjYjju1oLDkWDtuAePtH/3.