MySQL 5.7.8 JSON 合并新数据

标签 mysql sql json mysql-json

我正在尝试使用新的 MySQL JSON 支持为管理区域制作注释/评论系统。评论需要是可编辑的,我想在未来添加对其他东西的支持,也许是文件附件(将文件路径存储在 JSON 中,而不是文件本身!)。

    {
  "comments": [
    {
      "comment": "This is a comment",
      "user_id": 5,
      "datecreated": "2016-03-19"
    },
    {
      "comment": "This is a comment",
      "user_id": 1,
      "datecreated": "2016-03-19"
      "comments": [
        {
          "comment": "This is a sub-comment",
          "user_id": 4,
          "datecreated": "2016-03-19"
        },
        {
          "comment": "This is a sub-comment",
          "user_id": 4,
          "datecreated": "2016-03-19"
        }
      ]
    }
  ]
}

我认为会有一种类似于 array_merge() 的方法来合并新数据,而无需每次都针对特定的键。

此查询有效,但它只针对一件事,即评论的文本内容。如果我想添加/编辑标签、图像或文件附件等,那么我需要一个很长的查询或多个查询。

UPDATE shared_notes SET json = JSON_REPLACE(json, "$.comments[1].comment", "This is a test comment") WHERE note_id = :note_id

我尝试将 JSON_REPLACE 和 JSON_SET 函数与 JSON_OBJECT 一起使用,但它会覆盖所有未指定的键,这意味着 user_id、datecreated 和任何子注释都会被覆盖。

UPDATE shared_notes SET json = JSON_REPLACE(json, "$.comments[1]", JSON_OBJECT("comment", "This is a test comment") ) WHERE note_id = :note_id

这个科学怪人的查询几乎可以工作,但它实际上将更新的评论连接到旧评论的末尾:

UPDATE shared_notes SET json = JSON_SET(json, "$.comments[1]", JSON_MERGE(JSON_EXTRACT(json, "$.comments[1]"), CAST('{"comment":"Test"}' AS JSON) ) ) WHERE note_id = :note_id

那么有没有更好的方法可以使用 MySQL 或针对 $.comments[1].comment$.comments[1][0] 轻松/动态更新 JSON。 user_id 等唯一的方法?

最佳答案

供日后引用json_merge自 5.7.22 以来已被弃用,取而代之的是 json_merge_preservejson_merge_patch

所以添加到@Adam Owczarczyk's回答:

{...}
select json_merge_preserve('{"comments" : {"comment" : "This is a test comment" }}', comments)
from sampl_test;

关于MySQL 5.7.8 JSON 合并新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36187477/

相关文章:

mysql - 将列类型从 int 或 bigint 更改为时间戳

mysql - 使用mysql触发器删除记录

SQL:在已知问题时获取问题的所有标签

php - PDOStatement 到 JSON

json - 获取JSON中每个字段的名称

mysql - 动态表单字段验证的数据库设计

mysql - 在 MySQL 服务器版本 8 上执行 MySQL 查询时出错

sql - 将表插入 SQL Server View

mysql - 如何实现基于同义词的上下文搜索?

java - JSON 解析 : org. json.JSON.typeMismatch