Как искать записи, используя функцию JSON в mariadb из массива json - PullRequest
1 голос
/ 29 апреля 2020

Я изучаю JSON функцию в mariaDB, где у меня есть

СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ ПРОДУКТЫ (id INT NOT NULL ПЕРВИЧНЫЙ КЛЮЧ AUTO_INCREMENT, введите VARCHAR (1) NOT NULL, имя VARCHAR ( 40) NOT NULL, формат VARCHAR (20) NOT NULL, цена FLOAT (5, 2) NOT NULL, attr JSON NOT NULL)

INSERT INTO продукты (тип, имя, формат, цена, attr) VALUES ('M', 'Aliens', 'Blu-ray', 13.99, '{"video": {"resolution": "1080p", "aspectRatio": "1.85: 1"}, "cuts": [{ "name": "Theatrical", "runtime": 138}, {"name": "Special Edition", "runtime": 155}], "audio": ["DTS HD", "Dolby Surround"]} ' ); INSERT INTO продукты (тип, имя, формат, цена, атрибут) ЗНАЧЕНИЯ ('B', 'Foundation', 'Мягкая обложка', 7.99, '{"author": "Isaa c Asimov", "page_count": 296} ');

Я хочу узнать, сколько там записей, где Cuts.name = "Theatrical"

SELECT * FROM `products` where json_value(attr,'$.cuts.name')='Theatrical'

Здесь я получаю 0 результатов. Как искать данные из json массива?

1 Ответ

1 голос
/ 29 апреля 2020

Квадратные скобки [] должны использоваться для массивов.

Вы можете использовать JSON_EXTRACT(attr, "$.cuts[*].name") вложенную в JSON_CONTAINS() функцию с аргументом '"Theatrical"', чтобы определить, должны ли кортежи для name элементы массива cuts содержат '"Theatrical"':

SELECT  COUNT(*)
  FROM `products` 
 WHERE JSON_CONTAINS( JSON_EXTRACT(attr, "$.cuts[*].name"), '"Theatrical"' )

Демо

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