【发布时间】: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
我正在尝试将新元素推送到 MySQL 中的 JSON 数组。
例如。在下表中的人:
id(int) liked_ids(JSON)
1 [2,3]
现在我想将 5 推入 like_ids。
我查看了 JSON_ARRAY_APPEND,但即使从文档中也找不到使用它的方法。
【问题讨论】:
标签: mysql mysql-json
你需要使用:
UPDATE tab
SET liked_ids = JSON_ARRAY_APPEND (liked_Ids, '$', 5)
WHERE id = 1;
编辑:
我的 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;
【讨论】:
JSON_ARRAY_APPEND 不喜欢空数组。但是您可以使用 COALESCE(JSON_ARRAY_APPEND(liked_Ids, '$', 5), JSON_ARRAY(5)) 之类的东西来代替 CASE 语句。
NULL 关键字,而不仅仅是空的。为此,我已经挣扎了一个小时。 :(