Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新数组中的mysql json字段_Mysql_Arrays_Json - Fatal编程技术网

更新数组中的mysql json字段

更新数组中的mysql json字段,mysql,arrays,json,Mysql,Arrays,Json,有了这个json: { f1: "abc", f2: [ {id: 1, val:"a"}, {id: 2, val:"b"}, {id: 3, val:"c"} ], f3: [ "a", "b", "c" ] } 更新: 例如: SELECT JSON_SEARCH( '{"f1": "abc", "f2": [{"id": "1", "val":"a"}

有了这个json:

{
    f1: "abc",
    f2: [
        {id: 1, val:"a"},
        {id: 2, val:"b"},
        {id: 3, val:"c"}
    ],
    f3: [
        "a",
        "b",
        "c"
    ]
}
更新: 例如:

SELECT JSON_SEARCH(
'{"f1": "abc", "f2": [{"id": "1", "val":"a"},{"id": "2", "2":"b"},{"id": 3, "val":"2"}], "f3": ["a","b","c"]}',
'all', '1', null, '$.f2[*].id');
返回f2->id==1所需的路径 然后我可以使用

select json_set(
'{"f1": "abc", "f2": [{"id": "1", "val":"a"},{"id": "2", "2":"b"},{"id": 3, "val":"2"}], "f3": ["a","b","c"]}',
'$.f2[0].val', 'd');
更新数据

但是

找不到f2->id==1。也不是

SELECT JSON_SEARCH( 
'{"f1": "abc", "f2": [{"id": 1, "val":"a"},{"id": "2", "2":"b"},{"id": 3, "val":"2"}], "f3": ["a","b","c"]}',
'all', 1, null, '$.f2[*].id');  
=========

更新2: 我将把ID保存为字符串。。。但现在我还有一个问题:

SELECT JSON_SEARCH(
'{"mm": [{"id":"1","field":"test","value":33}]}',
'one', '1', null, '$.mm[*].id') as path;
正在工作

SELECT *  FROM document_data where document_id=5;
update document_data set data=JSON_SET(data, '$.mm', json_array()) where document_id=5;
update document_data set data=JSON_ARRAY_APPEND(data, '$.mm', '{"id":"1","field":"test","value":33}') where document_id=5;
SELECT JSON_SEARCH(data, 'one', '1', null, '$.mm[*].id') as path from document_data where id='5';
它不起作用。似乎是引用。 有人能帮忙吗

==========

如何使用JSON_集更新id==2的f2

我什么都试过了,但似乎不知道怎么做

非常感谢 根据设计,Rene似乎只搜索字符串,请参阅

一个非常不直观的选项是使用(小心性能问题):

mysql>选择版本();
+-----------+
|版本(|
+-----------+
| 5.7.20    |
+-----------+
一行一组(0.00秒)
mysql>SET@`json`:='{
'>“f1”:“abc”,
'>“f2”:[
'>{“id”:1,“val”:“a”},
'>{“id”:2,“val”:“b”},
'>{“id”:3,“val”:“c”}
'>         ],
“>“f3”:[“a”、“b”、“c”]
'> }',
->@`value`:=2,
->@`base_path`:='$.f2';
查询正常,0行受影响(0.00秒)
mysql>选择JSON\u搜索(
->替换(
->替换(
->替换(
->JSON_EXTRACT(@`JSON`,CONCAT(@`base_path`,'[*].id')),
->       ', ', '","'),
->     '[', '["'),
->   ']', '"]'),
->“一”,“值”转换为“路径”;
查询正常,1行受影响(0.00秒)
mysql>选择@`path`;
+---------+
|@`path`|
+---------+
| "$[1]"  |
+---------+
一行一组(0.00秒)
mysql>选择
->海螺(
->替换(
->JSON_UNQUOTE(@`path`),
->       '$',
->@`基本路径`
->     ),
->“.val”)转换为@'path`;
查询正常,1行受影响(0.00秒)
mysql>选择@`path`;
+-------------+
|@`path`|
+-------------+
|$.f2[1].val|
+-------------+
一行一组(0.00秒)
mysql>选择JSON_集(@`JSON`、@`path`、'd');
+-------------------------------------------------------------------------------------------------------------------+
|JSON_集(@`JSON`、@`path`、'd'))|
+-------------------------------------------------------------------------------------------------------------------+
|{“f1”:“abc”,“f2”:[{“id”:1,“val”:“a”},{“id”:2,“val”:“d”},{“id”:3,“val”:“c”}],“f3”:[“a”,“b”,“c”]}|
+-------------------------------------------------------------------------------------------------------------------+
一行一组(0.00秒)

请参阅。

如果您尝试了所有方法,则至少发布一次尝试。发布不起作用的查询,以便我们可以帮助您使其起作用。看,你的问题不清楚,我无法重现你提到的新问题,看,问题解决了。它不会将字符串转换为json…谢谢。但那绝对不是我想要的。。。我将把ID保存为字符串。但我补充了一些评论。MySQL和JSON似乎没有那么好用。。。
SELECT *  FROM document_data where document_id=5;
update document_data set data=JSON_SET(data, '$.mm', json_array()) where document_id=5;
update document_data set data=JSON_ARRAY_APPEND(data, '$.mm', '{"id":"1","field":"test","value":33}') where document_id=5;
SELECT JSON_SEARCH(data, 'one', '1', null, '$.mm[*].id') as path from document_data where id='5';