【问题标题】:Data Updating of JSON doesn't work (MySQL)JSON的数据更新不起作用(MySQL)
【发布时间】:2016-08-22 07:35:14
【问题描述】:

所以我在数据库中有一个如下所示的表:

类别

idCategory |数据

“idCategory”列是 AUTO_INCREMENT,数据字段是 JSON。 我的表中存储的数据如下所示:

1, {"CategoryNames": {"DE": "Wirtschaft", "EN": "Economy"}}
2, {"CategoryNames": {"DE": "Geschichte", "EN": "History"}}

想法是,以不同的语言存储类别的名称。我最好需要“CategoryNames”标签,这样我就可以在不影响语言的情况下添加其他属性,如“难度”左右。

我想要做的是在标签“CategoryNames”下添加其他语言而不删除或替换现有的。

所以它看起来像这样

2, {"CategoryNames": {"DE": "Geschichte", "EN": "History", "FR" : "Histoire"}}

我已经用JSON_INSERT 尝试过,类似这样:

UPDATE phpframework.category SET data = JSON_INSERT(data, "$.CategoryNames", JSON_OBJECT('FR', 'Histoire')) WHERE idCategory = 2;

但是什么也没发生,列保持不变。使用JSON_SET,它只是替换了我现有的语言。我也试过JSON_ARRAY_APPEND 但是看起来是这样的:

{"CategoryNames": [{"DE": "Geschichte", "EN": "History"}, {"EN": "Math"}]}

有人知道正确的 MYSQL 命令吗?

【问题讨论】:

    标签: mysql json database


    【解决方案1】:

    您不想插入整个对象,而是想在现有对象中设置属性。

    UPDATE phpframework.category 
    SET data = JSON_INSERT(data, "$.CategoryNames.FR", 'Histoire') 
    WHERE idCategory = 2;
    

    如果您希望它替换已经存在的属性,您也可以使用JSON_SET 代替JSON_INSERT

    【讨论】:

    • 哇,谢谢!是否也有可能一次添加多种语言及其类别名称?还是我必须为要为类别添加的每种语言进行查询?
    • JSON_INSERT 允许多次插入:JSON_INSERT(data, '$.CategoryNames.FR', 'Histoire', '$.CategoryNames.EN', 'History')
    • 文档甚至有插入多个项目的示例。
    • 太棒了!非常感谢!
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 2019-07-26
    相关资源
    最近更新 更多