Поиск по 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, поэтому мы добавляем кавычки вокруг слова "книга".