根据 JSON 数组中的内容过滤行
Filter rows based on contents in JSON array
我有一个 SQLite 数据库,其中包含一个具有文本列的 table。在此专栏中,我存储了一个 JSON 字符串数组。
这是 table,缩短后仅包含相关内容:
CREATE TABLE "recipePreview" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL, "intro" TEXT,
"tags" TEXT
)
和一些示例数据(手写的可能包含语法错误...):
INSERT INTO recipePreview (id, name, tags) VALUES (NULL, "My recipe", '["glutenFree","raw","naturallySweetened","vegan"]')
INSERT INTO recipePreview (id, name, tags) VALUES (NULL, "My other recipe", '["aquafaba","glutenFree","vegan"]')
我想根据 tags
列中 JSON 数组的内容过滤这些行。例如; returns 标记为 raw
的所有食谱的查询。我可以使用此查询来做到这一点:
SELECT * FROM recipePreview, json_tree(recipePreview.tags, '$')
WHERE value = "a tag"
我一直没弄清楚的是,是否有办法在我的 WHERE
子句中添加 AND
。 IE。看起来像这样的东西:
SELECT * FROM articles, json_tree(recipePreview.tags, '$')
WHERE value = "a tag" AND value = "another tag"
我不想只进行字符串比较(使用LIKE
),因为一个标签可能包含另一个标签的一部分。在搜索标有 candy
的食谱时,我不想获得 candy cotton
(人为的示例).
的点击率
OR
查询使用以下方法工作,因为 json_tree
实际上为 JSON 数组中的每个条目创建 "many rows"。
使用 JSON1
扩展是否有可能?
您可以使用LIKE
。利用 JSON 列中每个标签都包含在 "
中这一事实。
WHERE LIKE '%candy%'
将 return candy
和 cotton candy
.
WHERE LIKE '%"candy"%'
只会 return candy
.
尽管有嵌套,您甚至不需要使用 json_tree
,因为标签列表面上是文本。如果它是嵌套的,你可以 select 行
WHERE key = 'tags' and (value like '%"a tag"%' AND value like '%"another tag"%'
我有一个 SQLite 数据库,其中包含一个具有文本列的 table。在此专栏中,我存储了一个 JSON 字符串数组。
这是 table,缩短后仅包含相关内容:
CREATE TABLE "recipePreview" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"name" TEXT NOT NULL, "intro" TEXT,
"tags" TEXT
)
和一些示例数据(手写的可能包含语法错误...):
INSERT INTO recipePreview (id, name, tags) VALUES (NULL, "My recipe", '["glutenFree","raw","naturallySweetened","vegan"]')
INSERT INTO recipePreview (id, name, tags) VALUES (NULL, "My other recipe", '["aquafaba","glutenFree","vegan"]')
我想根据 tags
列中 JSON 数组的内容过滤这些行。例如; returns 标记为 raw
的所有食谱的查询。我可以使用此查询来做到这一点:
SELECT * FROM recipePreview, json_tree(recipePreview.tags, '$')
WHERE value = "a tag"
我一直没弄清楚的是,是否有办法在我的 WHERE
子句中添加 AND
。 IE。看起来像这样的东西:
SELECT * FROM articles, json_tree(recipePreview.tags, '$')
WHERE value = "a tag" AND value = "another tag"
我不想只进行字符串比较(使用LIKE
),因为一个标签可能包含另一个标签的一部分。在搜索标有 candy
的食谱时,我不想获得 candy cotton
(人为的示例).
OR
查询使用以下方法工作,因为 json_tree
实际上为 JSON 数组中的每个条目创建 "many rows"。
使用 JSON1
扩展是否有可能?
您可以使用LIKE
。利用 JSON 列中每个标签都包含在 "
中这一事实。
WHERE LIKE '%candy%'
将 return candy
和 cotton candy
.
WHERE LIKE '%"candy"%'
只会 return candy
.
尽管有嵌套,您甚至不需要使用 json_tree
,因为标签列表面上是文本。如果它是嵌套的,你可以 select 行
WHERE key = 'tags' and (value like '%"a tag"%' AND value like '%"another tag"%'