У меня есть следующий (псевдо) JSON в столбце типа JSON (LONGTEXT) в моем MariaDB 10.2
{"order":
{"otherstuff":...},
{"dates":
[
{
"typeId":2,
"date":"2019-05-21 09:00:00"
},
{
"typeId":4,
"date":"2019-05-21 10:00:00"
}
]
}
}
Мне нужна дата заказа, пока я знаю, какой тип мне нужен (4).
В заказе может быть несколько дат, идентифицированных по их typeId. typeId 4 не всегда находится на второй позиции.
SELECT JSON_UNQUOTE(JSON_SEARCH(`json`, 'one', 4, NULL, '$.dates[*].typeId'))
// gives me: $.dates[1].typeId
Моя первая мысль была о REPLACE
typeId с датой, но это жалуется на смешанные сопоставления.
Как бы я (более элегантно) ссылался на значение 'date' здесь?
Кроме того, запрос должен быть выражением столбца GENERATED
в моей таблице. Поскольку дата id4 не обязательно указана для каждого заказа, я попробовал это:
SELECT IF(4 IN (JSON_EXTRACT(json, '$.dates[*].typeId')), 'yes', 'no')
// above condition evaluates to [2, 4]
Я обрезал '[' и ']', но тогда он дает мне только «да», если 4 является первым в массиве (это массив?).
Итак (без скобок):
[4, 7]
-> да
[2, 4]
-> нет
Я предполагаю, что это не распознается как массив значений, а как строка. Тогда почему это дает мне «да», если моя игла находится в первом положении?
Вместо да и нет, я, очевидно, хочу использовать дату и NULL.
Функции MySQL JSON для меня совершенно новые. Так, может, кто-нибудь может указать мне правильное направление?