@romicohen
Системный Архитектор

Поле json в MySQL 5.7 содержит массив типа '[1,3,5]' — как оптимально сделать выборку записей, в которых есть значения x || y || z?

Сразу скажу: этот код писал не я =)

Это ребята таким вот образом решили реализовать отношение многие-ко-многим :-)

Два вопроса:

1) Как оптимальным образом в данной ситуации сформировать запрос, чтобы выбрать все записи, где в этом поле json содержатся значения, скажем: 2, 5 и 7 (напр. в выборку попадут записи, где этот json: [2,14,23,24] или [1,3,7])?

2) Можно ли это вообще оставлять в таком виде, или непременно надо переделывать к нормальному виду, через промежуточную таблицу?

Такая выборка - одна из ключевых в данном движке. Но приводить базу рабочего проекта к нормальному виду - это боль :D Потому меня сомненья гложут :)

Заранее спасибо за любое мнение!
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT DISTINCT data.*
FROM data
JOIN ( 
    SELECT 2 value 
    UNION ALL 
    SELECT 5 
    UNION ALL 
    SELECT 7
    ) criteria ON JSON_CONTAINS(data.jsonarray, CAST(criteria.value AS JSON))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы