Tôi đang cố gắng tìm hiểu xem có một hàng có chứa một ngày cụ thể trong một mảng JSON không
Giả sử dữ liệu của tôi trông như thế này:
Bảng ứng dụng:
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"}]
Làm cách nào tôi có thể tìm thấy tất cả các ứng dụng có dữ liệu chứa ngày '2016-04-26'
?
Vì vậy, về cơ bản tôi có thể làm điều này:
select id, json_extract(`data`, "$[*].date") from applications
Trả về:
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"]
Nhưng nếu cố gắng sử dụng json_extract
trong WHERE
mệnh đề, tôi chỉ có thể sử dụng nó nếu tôi nói rõ ràng khóa của mảng trong json_extract
đối số đường dẫn của, như vậy:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
trả về đúng hàng với id 4.
Nhưng nếu tôi cố gắng sử dụng ký tự đại diện trong đường dẫn thì nó không còn hoạt động:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
điều này sẽ trả về các hàng 2, 3, 4.
Tôi đã thử nhiều tùy chọn / biến thể khác nhưng dường như tôi không thể tìm ra cách cấu trúc truy vấn chính xác.
Là một cái gì đó như thế này thậm chí có thể với việc triển khai MySQL JSON hiện tại?
data
, "$ [0] .date") là 'ngày' từ các ứng dụng, hơn- chọn id, json_extract (data
, "$ [1] .date") dưới dạng 'ngày' từ các ứng dụng, v.v. và có danh sách id