您好我在MySQL中使用JSON。我遇到了麻烦...
例如,我有以下数据
{
1:{fan:0},
2:{fan:3},
3:{fan:4},
}
我希望将每个粉丝值更新为6:如何在MySQL语句中执行此操作?
我的下面的陈述给出“在这种情况下路径表达式可能不包含*和**标记”
UPDATE mytable set json = JSON_REPLACE(json,'$.*."Fan"', 6);
有没有简单的方法来实现这个目标?
答案 0 :(得分:1)
一种选择是使用存储的例程(Function)。根据需要修改脚本:
DROP FUNCTION IF EXISTS `update_json`;
DELIMITER //
CREATE FUNCTION `update_json` (
`json` JSON,
`key` CHAR(5),
`value` TINYINT
) RETURNS JSON
BEGIN
DECLARE `_keys` JSON DEFAULT JSON_KEYS(`json`);
DECLARE `_length_keys` TINYINT UNSIGNED DEFAULT JSON_LENGTH(`_keys`);
DECLARE `_current_key` TINYINT UNSIGNED DEFAULT 0;
DECLARE `_key` VARCHAR(10);
WHILE `_current_key` < `_length_keys` DO
SET `_key` := JSON_EXTRACT(`_keys`, CONCAT('$[', `_current_key`, ']')),
`json` := JSON_REPLACE(`json`, CONCAT('$.', `_key`,'.', `key`), `value`),
`_current_key` := `_current_key` + 1;
END WHILE;
RETURN `json`;
END//
DELIMITER ;
UPDATE `mytable`
SET `json` = `update_json`(`json`, '"fan"', 6);
请参阅db-fiddle。