MYSQL LEFT JOIN on each value JSON

101
29 декабря 2021, 11:50

Прошу помощи (mysql 5.7) В связи с большим количеством данных в таблице было принято решение хранить связи ячеек не в отдельной таблице как обычно принято, а указывать их непосредственно напротив каждого поля в JSON

Есть таблица t1 в которой в поле vIDs хранятся ключи (50 штук) таблицы t2:

CREATE TABLE `t1` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
.....
  `vIDs` json DEFAULT NULL,
)

Таблица t2

CREATE TABLE `t2` (
  `vID` int(11) NOT NULL AUTO_INCREMENT,
.....
)

Необходимо сделать запрос к таблице t1 и вывести все связанные ключи из таблицы t2 которые хранятся в JSON t1.vIDs

EXPLAIN  SELECT t1.* FROM t1 LEFT OUTER JOIN  t2 ON JSON_CONTAINS(t1.vIDs->"$.*",JSON_ARRAY(t2.vID)) WHERE t1.ID=1 

Данный запрос работает, но почему то идет проход по всем ключам из t2. И это не годится с текущим объемом базы. Можно конечно сделать два запроса. В первом запроса Достать JSON из t1, разобрать его на php и Вторым запросом собрать все значения через IN или = и будет работать намного быстрее, но хочется эстетической красоты и уложить это все в 1 запрос.

Может возможно как то значения из t1.vIDs (JSON ключи) записать во временную таблицу и уже по ней делать JOIN?

READ ALSO
Игра "Виселица" не работает коректно

Игра "Виселица" не работает коректно

Игра работает, но игрок выигрывает если он угадывает всего лишь одну любую букву, что не правильно, потому как игрок должен отгадатать все...

115
Помогите решить задачу с перебором классов и добавлением нового

Помогите решить задачу с перебором классов и добавлением нового

Есть множество div элементов с одинаковым классомПри переборе я должен найти тот div в блоке которого указано например буква 'h' и присвоить...

95
Атрибут Vue.js в сгенерированном html

Атрибут Vue.js в сгенерированном html

Мне нужно сделать обработчик события click для html элемента, который динамически генерируется с помощью vuejs(v-html)

149
Направление движения свайпа

Направление движения свайпа

Я начал делать меню, чтобы при свайпе влево, открывалось меню, а при свайпе вправо закрывалосьНо я не понимаю, как мне определять продолжительность...

120