Estoy tratando de averiguar si hay una fila que contiene una fecha específica dentro de una matriz JSON
Digamos que mis datos se ven así:
Aplicaciones de mesa:
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"}]
¿Cómo puedo encontrar todas las aplicaciones cuyos datos contienen la fecha '2016-04-26'
?
Entonces básicamente puedo hacer esto:
select id, json_extract(`data`, "$[*].date") from applications
Que devuelve:
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"]
Pero si trato de usar json_extract
en la WHERE
cláusula, solo puedo usarlo si explícitamente le digo a la clave de la matriz en el json_extract
argumento de la ruta de acceso de la siguiente manera:
select * from applications where json_extract(`data`, "$[0].date") = "2016-04-26"
que devuelve correctamente la fila con id 4.
Pero si trato de usar un comodín en la ruta, ya no funciona:
select * from applications where json_extract(`data`, "$[*].date") = "2016-04-26"
Esto debería devolver las filas 2, 3, 4.
Intenté muchas otras opciones / variaciones, pero parece que no puedo encontrar una manera de estructurar la consulta correctamente.
¿Es posible algo como esto con la implementación actual de MySQL JSON?
data
, "$ [0] .date") como 'fecha' de las aplicaciones, que- seleccione id, json_extract (data
, "$ [1] .date") como 'fecha' de las aplicaciones, y etc. que apliquen todos los filtros y tener una lista de identificación