2017-11-10 9 views
1

こんにちは私はMySQLでJSONを扱っています。 MySQLの文でこれを実行する方法:私は例えば、私は1行に複数のjsonオブジェクトを更新するにはどうすればよいですか?

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

以下のようにデータを持っていると私は6に、すべてのファンの値の更新を希望する...トラブルに

をぶつけ?

私の下の文は

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

「*と**のトークンを含めることはできません。このような状況のパス式では」与え、これを達成するための任意の簡単な方法はありますか?

答えて

1

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

oh!私はdb-fiddleでそれを見る。それは正常に動作します!一見すると分かりません。とにかく私は把握する必要があります!ご回答有難うございます.. –

関連する問題