【问题标题】:how to push an element to a JSON in MySQL如何在 MySQL 中将元素推送到 JSON
【发布时间】:2023-04-11 07:16:01
【问题描述】:

我正在尝试将新元素推送到 MySQL 中的 JSON 数组。

例如。在下表中的人:

id(int)     liked_ids(JSON)
   1              [2,3]

现在我想将 5 推入 like_ids。

我查看了 JSON_ARRAY_APPEND,但即使从文档中也找不到使用它的方法。

【问题讨论】:

    标签: mysql mysql-json


    【解决方案1】:

    你需要使用:

    UPDATE tab
    SET liked_ids = JSON_ARRAY_APPEND (liked_Ids, '$', 5)
    WHERE id = 1;
    

    DBFiddel Demo

    编辑:

    我的 like_ids 最初为 null。创建表时如何强制将其默认为数组?

    你可以试试CASE 表达式:

    UPDATE tab
    SET liked_ids = CASE WHEN liked_ids IS NULL THEN '[5]'
                    ELSE  JSON_ARRAY_APPEND (liked_Ids, '$', 5)
                    END
    WHERE id = 1;
    
    --or as @Paul Spiegel mentioned
    UPDATE tab
    SET liked_ids = COALESCE(JSON_ARRAY_APPEND(liked_Ids, '$', 5), JSON_ARRAY(5))
    WHERE id = 1;
    

    DBFiddle Demo2

    【讨论】:

    • 我的 like_ids 最初为 null。如何在创建表时默认将其强制为数组,以便您的上述解决方案有效?
    • 太糟糕了,JSON_ARRAY_APPEND 不喜欢空数组。但是您可以使用 COALESCE(JSON_ARRAY_APPEND(liked_Ids, '$', 5), JSON_ARRAY(5)) 之类的东西来代替 CASE 语句。
    • 字段必须为 Null,就像真正的 null,其中包含 NULL 关键字,而不仅仅是空的。为此,我已经挣扎了一个小时。 :(
    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 2020-04-22
    • 2019-02-24
    • 2022-12-22
    • 1970-01-01
    • 2019-08-30
    • 2017-12-11
    • 2015-08-18
    相关资源
    最近更新 更多