我有一个MySQL(v5.7)数据库,其中有一张名为deals的表格,它包含一个名为status的JSON列。
Status以以下格式(对格式不正确的部分表示歉意)包含数据(在deals id = 29中):
{
"trackStatus":
[
{
"date":[],
"notes":[],
"value":"0",
"isChecked":false
},
{
"date":["2019-03-25T17:42:45-04:00"],
"notes":[],
"value":4,
"isChecked":true
}
],
"nextStatusIndex":0,
"currentDealStatus":4
}
我试图查询trackStatus
数组中value
= 4的数据来判断是否被选中。
通过阅读MySQL参考文档,我理解需要使用JSON_EXTRACT
函数来获取数据。
根据一些示例,我尝试了以下查询以查看是否可以返回trackStatus
:
SELECT JSON_EXTRACT(status, '$.trackStatus')
FROM deals
WHERE deals.id = 29
这个功能是有效的并返回 trackStatus
。但是,当我试图在此基础上查询 trackStatus
中特定的 isChecked
时,它不会返回值(不是 null 而是空白)。
SELECT JSON_EXTRACT(status, '$.trackStatus', '$.isChecked')
FROM deals
WHERE deals.id = 29 AND JSON_EXTRACT(status, '$.trackStatus', '$.value') = 4
我已经尝试了无数种不同的查询方法,结果却转了个圈。
我意识到问题出在 trackStatus
上,因为如果我删除该数组,就可以查询 nextStatusIndex
且可以正常工作。但是加上这个数组后,却不能正常工作。
所以我希望有人能够向我展示如何/是否能够使用 MySQL 查询来查询此 JSON(包括 trackStatus
和 nextStatusIndex
),并给定数据格式的方式。