Я намагаюся з'ясувати, чи є рядок, який містить конкретну дату в масиві JSON
Скажімо, мої дані виглядають так:
Настільні програми:
id | application_id | data
# Rows
1 | 1 | [{"data" : ["some", "data#1"], "date": "2016-04-21"}, {"data" : ["other", "data#1"], "date" : "2016-04-22"}]
2 | 2 | [{"data" : ["some", "data#2"], "date": "2016-04-21"}, {"data" : ["other", "data#2"], "date" : "2016-04-26"}]
3 | 1 | [{"data" : ["some", "data#3"], "date": "2016-04-22"}, {"data" : ["other", "data#3"], "date" : "2016-04-26"}]
4 | 3 | [{"data" : ["some", "data#4"], "date": "2016-04-26"}]
Як я можу знайти всі програми, дані яких містять дату '2016-04-26'
?
Тому я в основному можу це зробити:
select id, json_extract(`data`, "$[*].date") from applications
Що повертає:
1 | ["2016-04-21", "2016-04-22"]
2 | ["2016-04-21", "2016-04-26"]
3 | ["2016-04-22", "2016-04-26"]
4 | ["2016-04-26"]
Але якщо спробувати використовувати json_extract
в WHERE
пункті, я можу використовувати його лише в тому випадку, якщо явно скажу ключ масиву в json_extract
аргументі шляху, наприклад:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
який правильно повертає рядок з id 4.
Але якщо я спробую використати підстановку на шляху, то це більше не працює:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
це повинно повернути рядки 2, 3, 4.
Я спробував багато інших варіантів / варіацій, але не можу знайти спосіб структурування запиту правильно.
Чи щось подібне можливо навіть із поточною реалізацією MySQL JSON?
data
, "$ [0] .date") як "дата" в додатках, ніж - виберіть ідентифікатор, json_extract (data
, "$ [1] .date") як "дата" для програм та ін., ніж застосувати весь фільтр і у вас є список id