Как можно выполнить поиск с использованием оператора LIKE по значению поля, находящегося в массиве в столбце(json) в базе данных?

Как выполнить запрос поиск по полям телефонов в массиве, который содержит данные о телефонах у каждого элемента, используя оператор LIKE?
  • 19 марта 2024 г. 5:39
Ответы на вопрос 2
Для выполнения поиска с использованием оператора LIKE по значению поля, находящегося в массиве в столбце JSON в базе данных, можно использовать функции JSON_EXTRACT или JSON_CONTAINS. 

Пример запроса для поиска по значению поля "name" в массиве "phones" в столбце "data" таблицы "users":

```sql
SELECT * 
FROM users 
WHERE JSON_CONTAINS(data->'$.phones[*].name', '"value_to_search"', '$')
```

Для выполнения запроса поиска по полям телефонов в массиве, содержащем данные о телефонах у каждого элемента, используя оператор LIKE, можно воспользоваться оператором ->>, чтобы извлечь значение поля в виде строки:

Пример запроса для поиска по полям телефонов в массиве "phones" в столбце "data" таблицы "users":

```sql
SELECT * 
FROM users 
WHERE data->>'$.phones[*].number' LIKE '%value_to_search%'
```

Замените "value_to_search" на значение, которое нужно найти в массиве.
Сделать нормализацию структуры базы. 
Перенести JSON в таблицу user_phone.
Поля:
phone_id, -- первичный ключ телефона
user_id, -- внешний ключ, кому относится телефон
phone, -- телефон
phone_comment, -- комментарий к телефону
-- еще поля по вкусу, но иногда выручающие
is_main, -- основной не основной/порядок приоритета
add_date -- дата внесения телефона
И в запросах уже нормально джойнить и лайкать эту таблицу.
Похожие вопросы