我想做什么,但我猜它有些不可能:
我在一列中有JSON数据用于保存翻译。例如列描述值:{"de": "hi wie gehts?", "en": "hi, how are you?"}
现在我想只更新"en"
属性。我知道JSON_REPLACE
可以实现它,但它有一个奇怪的语法,我必须首先生成SQL代码才能实现这一点。
我正在寻找的是发送{"en": "hi, how are you!?"}
的可能性,然后它应保留"de"
属性并仅更新"en"
属性。
有JSON_MERGE
功能,但这不是我要找的,但除此之外,这就是我喜欢使用的语法。
是否有一些嵌套mysql函数的解决方法?
答案 0 :(得分:1)
如果12.16 JSON Functions可用,则无法轻松实现所需。如果普通JSON总是只有一个键,你可以尝试类似:
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.19 |
+-----------+
1 row in set (0.00 sec)
mysql> SET
-> @`json` := '{"de": "hi wie gehts?", "en": "hi, how are you?"}',
-> @`plain_json` := '{"en": "hi, how are you!?"}';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT
-> JSON_MERGE(
-> JSON_REMOVE(
-> @`json`,
-> CONCAT('$.',
-> JSON_EXTRACT(
-> JSON_KEYS(@`plain_json`),
-> '$[0]'
-> )
-> )
-> ),
-> @`plain_json`
-> ) `UPDATE`;
+----------------------------------------------------+
| UPDATE |
+----------------------------------------------------+
| {"de": "hi wie gehts?", "en": "hi, how are you!?"} |
+----------------------------------------------------+
1 row in set (0.00 sec)
如果普通JSON中有多个密钥,则需要更复杂的密钥才能实现目标。
请参阅db-fiddle。