Поиск по JSON полю в MySQL

2024-03-06 21:16:30


MySQL предоставляет функции для работы с JSON, включая поиск совпадений в полях этого типа. Вот несколько шагов, чтобы продемонстрировать, как это работает.

Создание таблицы с полем JSON: для начала, нам нужна таблица с полем JSON. Допустим, у нас есть таблица users, в которой есть поле data типа JSON.


CREATE TABLE users(
    id INT AUTO_INCREMENT,
    data JSON,
    PRIMARY KEY(id)
);

Добавление данных в таблицу: теперь, давайте добавим некоторые данные в нашу таблицу.


INSERT INTO users(data) VALUES('{"name": "Иван", "age": 25}');
INSERT INTO users(data) VALUES('{"name": "Анна", "age": 30}');

Поиск совпадений в поле JSON: теперь, когда у нас есть данные, мы можем использовать функцию JSON_EXTRACT() или -> для извлечения значений из поля JSON. Это может быть полезно при поиске совпадений.


SELECT * FROM users WHERE JSON_EXTRACT(data, '$.name') = 'Иван';

В этом запросе мы ищем всех пользователей, у которых поле name в JSON равно 'Иван'.

Это был базовый пример работы с JSON в MySQL. В зависимости от ваших потребностей, вы можете использовать другие функции JSON, такие как JSON_CONTAINS() для проверки наличия определенных значений или JSON_SEARCH() для поиска подстроки в значениях JSON.

Поиск по одномерному JSON массиву (списку)

Рассмотрим случай, когда нам требуется найти значения в одномерном массиве (списке) JSON.

Создание таблицы с полем JSON: Пусть у нас есть таблица products, в которой есть поле tags типа JSON.


CREATE TABLE products(
    id INT AUTO_INCREMENT,
    tags JSON,
    PRIMARY KEY(id)
);

Добавление данных в таблицу: Добавим некоторые данные в нашу таблицу.


INSERT INTO products(tags) VALUES('["книга", "образование", "литература"]');
INSERT INTO products(tags) VALUES('["еда", "здоровье", "органик"]');

Поиск совпадений в одномерном массиве JSON: Теперь, когда у нас есть данные, мы можем использовать функцию JSON_CONTAINS() для поиска совпадений в массиве JSON.


SELECT * FROM products WHERE JSON_CONTAINS(tags, '"книга"');

В данном запросе мы ищем все продукты, у которых в поле tags присутствует тэг "книга". Обратите внимание, что аргумент для JSON_CONTAINS() должен быть в формате JSON, поэтому мы добавляем кавычки вокруг слова "книга".