Фильтровать строки на основе содержимого в массиве JSON - PullRequest
0 голосов
/ 14 мая 2019

У меня есть база данных SQLite, которая содержит таблицу с текстовым столбцом.В этом столбце я храню массив строк JSON.

Это таблица, сокращенная, чтобы включить только то, что имеет отношение:

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"]')

Я хочу отфильтровать эти строки на основе содержимого массива JSON в столбце tags.Например;запрос, который возвращает все рецепты, помеченные raw.Я могу сделать это, используя этот запрос:

SELECT * FROM recipePreview, json_tree(recipePreview.tags, '$')
    WHERE value = "a tag"

Что я не смог выяснить, так это есть ли способ иметь AND в моем WHERE предложении.То есть.что-то похожее на это:

SELECT * FROM articles, json_tree(recipePreview.tags, '$')
    WHERE value = "a tag" AND value = "another tag"

Я не хочу просто сравнивать строки (используя LIKE), потому что один тег может содержать частидругой тег.При поиске рецептов, помеченных candy, я не хочу получать хиты для candy cotton (надуманный пример) .

OR запросов работают со следующим подходом как json_tree фактически создает «много строк» ​​для каждой записи в массиве JSON.

Возможно ли это как-то с использованием расширения JSON1?

1 Ответ

0 голосов
/ 14 мая 2019

Вы можете использовать LIKE. Используйте тот факт, что в столбце JSON каждый тег заключен в ".

WHERE LIKE '%candy%' вернет candy и cotton candy.
WHERE LIKE '%"candy"%' вернет только candy.

Несмотря на вложенность, вам даже не нужно использовать json_tree, поскольку столбец тегов якобы является TEXT. Если он вложенный, вы можете выбрать строки WHERE key = 'tags' and (value like '%"a tag"%' AND value like '%"another tag"%'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...