JSON dizisi içinde belirli bir tarih içeren bir satır olup olmadığını bulmaya çalışıyorum
Diyelim ki verilerim şöyle görünüyor:
Tablo uygulamaları:
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"}]
Verileri tarihi içeren tüm uygulamaları nasıl bulabilirim '2016-04-26'
?
Temelde bunu yapabilirim:
select id, json_extract(`data`, "$[*].date") from applications
Hangi döndürür:
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"]
Deneyin kullanmak Ama eğer json_extract
içinde WHERE
maddesi açıkça içinde dizinin anahtarı söylersen ben sadece bunu kullanabilirsiniz json_extract
böylece gibi 'nın yol argüman:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
4 numaralı satırı doğru döndürür.
Ama yolda bir joker karakter kullanmaya çalışırsam, artık çalışmaz:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
bu satır 2, 3, 4'ü döndürmelidir.
Diğer birçok seçenek / varyasyon denedim ama doğru sorgu yapılandırmak için bir yol bulamıyorum.
MySQL JSON'un şu anki uygulamasıyla böyle bir şey mümkün mü?
data
'tarih' olarak json_extract (data
, "$ [0] .date"), tüm filtreyi uygulamak yerine id'den json_extract ( , "$ [1] .date") vb. seçin. ve id listesi var