gpt4 book ai didi

json - 使用 JSON1 更新 SQLite 中的 JSON

转载 作者:行者123 更新时间:2023-12-01 17:33:41 25 4
gpt4 key购买 nike

SQLite JSON1 扩展有一些非常巧妙的功能。但是,我无法弄清楚如何更新或插入单个 JSON 属性值。

这是一个例子

CREATE TABLE keywords
(
id INTEGER PRIMARY KEY,
lang INTEGER NOT NULL,
kwd TEXT NOT NULL,
locs TEXT NOT NULL DEFAULT '{}'
);

CREATE INDEX kwd ON keywords(lang,kwd);

我使用此表来存储关键字搜索并记录对象 locs 中启动搜索的位置。此数据库表中的示例条目如下所示

 id:1,lang:1,kwd:'stackoverflow',locs:'{"1":1,"2":1,"5":1}'

此处的位置对象属性是存储在其他地方的实际位置的索引。

现在想象一下以下场景

  • 从位置索引“2”开始搜索 stackoverflow。在这种情况下,我只想增加该索引处的值,以便在操作之后读取相应的行

    id:1,lang:1,kwd:'stackoverflow',locs:'{"1":1,"2":2,"5":1}'

  • stackoverflow 的搜索是从先前未知的位置索引“7”发起的,在这种情况下,必须读取更新后的相应行

    id:1,lang:1,kwd:'stackoverflow',locs:'{"1":1,"2":1,"5":1,"7":1}'

我不清楚这实际上是否可以做到。我尝试了一些类似的事情

UPDATE keywords json_set(locs,'$.2','2') WHERE kwd = 'stackoverflow';

给出了错误消息error close json_set。我非常感谢任何能够告诉我如何/是否应该/可以完成此操作的人。

最佳答案

没有必要创建如此复杂的带有子查询的 SQL 来执行此操作。

下面的 SQL 可以满足您的需求。

UPDATE keywords 
SET locs = json_set(locs,'$.7', IFNULL(json_extract(locs, '$.7'), 0) + 1)
WHERE kwd = 'stackoverflow';

我知道这很旧,但它就像搜索时的第一个链接,它值得一个更好的解决方案。

关于json - 使用 JSON1 更新 SQLite 中的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49856672/

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