如何在 MySQL 中将元素推送到 JSON
Posted
技术标签:
【中文标题】如何在 MySQL 中将元素推送到 JSON【英文标题】:how to push an element to a JSON in MySQL 【发布时间】:2018-08-12 04:07:38 【问题描述】:我正在尝试将新元素推送到 mysql 中的 JSON 数组。
例如。在下表中的人:
id(int) liked_ids(JSON)
1 [2,3]
现在我想将 5 推入 like_ids。
我查看了 JSON_ARRAY_APPEND,但即使从文档中也找不到使用它的方法。
【问题讨论】:
【参考方案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
关键字,而不仅仅是空的。为此,我已经挣扎了一个小时。 :(以上是关于如何在 MySQL 中将元素推送到 JSON的主要内容,如果未能解决你的问题,请参考以下文章
如何在 angularjs 中将元素推送到 http.put 中的数组?
如何在一个数据库命中中将多个插入或更新推送到一起 - 对于多数据库(SQL Server、Oracle、MySQL 和 PostgreSQL)应用程序