gpt4 book ai didi

mysql - MySQL 中的 JSON_REMOVE 对象

转载 作者:行者123 更新时间:2023-11-29 09:44:09 27 4
gpt4 key购买 nike

我正在尝试从 MySQL 中的 JSON 数组中删除对象。

我有一个名为 cart 的表,其中有两个字段 quote_id 类型 intitems 类型 json ,其内容如下存储在 MySQL 中的行

报价 ID:0

项目:

[
{
“一”:42,
“b”:“测试4”
},
{
“一”:32,
“b”:“测试3”
}
]

我正在尝试创建一个查询,该查询将从 json 数组中删除 json 对象。例如每个
{
“一”:32,
“b”:“测试3”
}

我尝试了很多查询。首先我得到了这个:

UPDATE cart
SET items = IFNULL(JSON_REMOVE(items, JSON_UNQUOTE(JSON_SEARCH(items, 'one', 'test3'))), items)
WHERE quote_id = 13392;

但是它只是从第二个对象中删除“b”:“test3”并在其中保留“a”:32,我需要一个查询来找到整个对象并将其删除。

这是我的第二个查询:

UPDATE cart
SET items = IFNULL(JSON_REMOVE(items, JSON_SEARCH(items, 'one', CAST('{"a": 32, "b": "test3"}' AS JSON))), items)
WHERE quote_id = 13392;

但是我认为对其进行搜索不起作用。我在不使用 CAST()AS JSON 的情况下尝试了它,但它仍然不起作用。

正如我所说,我很确定问题出在 JSON_SEARCH 上,但也许有人有解决方案?

谢谢!

最佳答案

JSON_SEARCH 返回属性的路径,而不是对象本身的路径。

因此您可以使用以下解决方案来通过 SUBSTR 获取对象路径:

SELECT JSON_REMOVE(items, 
SUBSTR(JSON_UNQUOTE(JSON_SEARCH(items, 'one', 'test3')), 1, LOCATE('.', JSON_UNQUOTE(JSON_SEARCH(items, 'one', 'test3')))-1)
) FROM cart

您还可以使用REGEXP_SUBSTR来获取对象路径:

SELECT JSON_REMOVE(items, REGEXP_SUBSTR(JSON_UNQUOTE(JSON_SEARCH(items, 'one', 'test3')), '^\\$\\[[0-9]+\\]'))
FROM cart

demo on dbfiddle.uk

关于mysql - MySQL 中的 JSON_REMOVE 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56022118/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com