我试图找出是否在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
的path参数中明确告诉数组的键时才能使用它,例如:
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
从应用程序中将json_extract(,“ $ [0] .date”)作为'date',然后从应用程序中选择id,从应用程序中选择json_extract(data
,“ $ [1] .date”)作为'date',等等。并有ID列表