patrickb123 Ответов: 1

Помогите с запросом MySQL


Привет, я разработал таблицу для размещения пользовательских полей. В основном все они уходят от ссылки на случай, такой как "тест". Все поля хранятся в столбце json внутри массива объектов json. Мне нужно запросить несколько полей в JSON_TABLE.

Как бы я запросил это, чтобы получить такие поля, как: Fields.test, Fields.test2

Шаблон JSON:
{"field": [
{"value": "30/07/2020", "FieldName": "Fields.test"},
{"value": "29/07/2020", "FieldName": "Fields.test2"}
]}


Что я уже пробовал:

Я могу запросить значение одного из полей с помощью JSON_TABLE, как показано ниже:
SELECT CaseRef, CaseTypeIndex,name,value FROM FieldValues, JSON_TABLE ( FieldValues.json, "$.field[*]" COLUMNS ( name VARCHAR(100) PATH "$.FieldName", value VARCHAR(100) PATH "$.value")) as Results WHERE name = 'Fields.test'

1 Ответов

Рейтинг:
0

W∴ Balboos, GHB

В зависимости от того, что вы делаете с данными (большую часть времени) Я бы перешел с хранилища JSON на формат тега/значения. Тег может быть определенным пользователем именем поля, значение (все они изначально хранятся как char) именно таково. Тогда вы можете легко собрать все, что пожелаете.

В другом столбце вы можете создать ассоциативную связь. Родительская таблица может определять каждый набор записей и предоставлять эту ассоциативную связь.

Вместе вы можете иметь любое количество определяемых пользователем значений для каждой родительской ссылки - ноль или более - по существу без ограничений.

Кстати, всего несколько недель назад я заглянул в тип поля JSON для SQL и подумал, что это действительно здорово. Ну, мой босс - очень хороший DBA - и он указал, как (в большинстве случаев) это было бы очень неэффективно и вызвало бы серьезную нагрузку на систему. Способность внутренне индексировать поля он находил ужасающими по последствиям для производительности.


Итак, представьте себе, что ваши данные "вертикально ориентированы" как отдельные связанные записи, а не горизонтально ориентированы как текст JSON.