2017-11-10 1 views
1

안녕하세요, 저는 MySQL의 JSON에서 작업합니다. 나는 내가한 줄에 여러 개의 json 객체를 업데이트하는 방법은 무엇입니까?

{ 
    1:{fan:0}, 
    2:{fan:3}, 
    3:{fan:4}, 
} 

다음과 같이 데이터가 그리고 업데이 트를 6 모든 팬 값을 기원합니다, 예를 들어

... 문제에 부딪쳤다 : 어떻게 MySQL의 문에서이 작업을 수행하려면?

내 아래 문은 제공이를 달성하기 위해 어떤 간단한 방법이 있나요

UPDATE mytable set json = JSON_REPLACE(json,'$.*."Fan"', 6); 

"이 상황에서 경로 표현은 ** 토큰을 * 등을 포함 할 수 없습니다"?

답변

1

하나의 옵션은 저장된 루틴 (함수)을 사용하는 것입니다. 필요에 따라 스크립트를 수정하십시오.

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을 참조하십시오.

+0

오! db-fiddle에서 보았습니다. 잘 작동합니다! 한 눈에, 나는 알아낼 수 없다. 어쨌든 나는 알아낼 필요가있다! 당신의 대답을 주셔서 감사합니다 .. –

관련 문제