ฉันกำลังพยายามหาว่ามีแถวที่มีวันที่ที่ระบุในอาร์เรย์ 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
อาร์กิวเมนต์พา ธ ของอย่างชัดเจนเช่น:
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
, "$ [0] .date") เป็น 'date' จากแอปพลิเคชัน, - เลือก id, json_extract (data
, "$ [1] .Date") เป็น 'date' จากแอปพลิเคชันและอื่น ๆ กว่าใช้ตัวกรองทั้งหมด และมีรายการ id