Поле 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 Потому меня сомненья гложут :)
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))