Saya mencoba mencari tahu apakah ada baris yang berisi tanggal tertentu di dalam array JSON
Katakanlah data saya terlihat seperti ini:
Aplikasi meja:
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"}]
Bagaimana saya bisa menemukan semua aplikasi yang datanya berisi tanggal '2016-04-26'
?
Jadi pada dasarnya saya bisa melakukan ini:
select id, json_extract(`data`, "$[*].date") from applications
Yang mengembalikan:
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"]
Tetapi jika mencoba menggunakan json_extract
dalam WHERE
klausa saya hanya bisa menggunakannya jika saya secara eksplisit memberi tahu kunci array dalam json_extract
argumen path, seperti:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
yang mengembalikan baris dengan benar dengan id 4.
Tetapi jika saya mencoba menggunakan wildcard di jalan maka itu tidak lagi berfungsi:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
ini harus mengembalikan baris 2, 3, 4.
Saya mencoba banyak opsi / variasi lain tetapi sepertinya saya tidak dapat menemukan cara untuk menyusun kueri dengan benar.
Apakah hal seperti ini bahkan mungkin dengan implementasi MySQL JSON saat ini?
data
, "$ [0] .date") sebagai 'date' dari aplikasi, daripada- pilih id, json_extract (data
, "$ [1] .date") sebagai 'date' dari aplikasi, dan lain-lain daripada menerapkan semua filter dan memiliki daftar id