mysql은 전체 json의 특정 필드 데이터를 쿼리합니다.

최근 mysql의 강력한 기능을 발견하여 전체 json에서 특정 값의 데이터를 직접 쿼리 할 수 ​​있습니다. json에
해당하는 필드 내용은 다음과 같습니다.
msg_content에 해당하는 내용은 json 필드입니다.

{
    
    
    "fileName":"测非编1.mp4",
    "filePath":"/mnt/windows/folderscan/uploadAndTask/91/测非编1.mp4",
    "taskName":"截取首帧失败",
    "taskFailStage":"1"
}

원본 데이터는 다음과 같습니다.
여기에 사진 설명 삽입

 SELECT
	id,
	msg_code AS msgCode,
	read_flag AS readFlag,
	msg_content ->> '$.mediaId' as mediaId,
	msg_content ->> '$.fileName' as fileName,
	msg_content ->> '$.taskName' as taskName,
	msg_content ->> '$.filePath' as filePath
FROM
	notice_msg
WHERE
	receive_user_id = '79'

쿼리를 분할 한 후 결과는 다음과 같습니다
여기에 사진 설명 삽입
. 필드가 json 배열 인 경우 :

[
    {
    
    
        "time": 1594034025178,
        "stage": 1,
        "detail": [
            {
    
    
                "stage": 1,
                "stepName": "视频信息获取",
                "createTime": 1594034024803,
                "stepStatus": 1
            },
            {
    
    
                "stage": 1,
                "stepName": "首帧截取",
                "createTime": 1594034025141,
                "stepStatus": 1
            },
            {
    
    
                "stage": 1,
                "stepName": "预处理",
                "createTime": 1594034025178,
                "stepStatus": 1
            }],
        "status": 1
    },
    {
    
    
        "time": 1594034025202,
        "stage": 2,
        "detail": [
            {
    
    
                "stage": 2,
                "stepName": "基础数据入库",
                "createTime": 1594034025202,
                "stepStatus": 1
            }],
        "status": 1
    },
    {
    
    
        "time": 1594034650094,
        "stage": 3,
        "detail": [
            {
    
    
                "stage": 3,
                "explain": "引擎识别人脸为空",
                "stepName": "本地引擎人脸检测",
                "createTime": 1594034616695,
                "stepStatus": 1
            },
            {
    
    
                "stage": 3,
                "explain": "识别结果81条",
                "stepName": "本地引擎音频检测",
                "createTime": 1594034616765,
                "stepStatus": 1
            },
            {
    
    
                "stage": 3,
                "explain": "识别结果46个",
                "stepName": "本地引擎场景检测",
                "createTime": 1594034616838,
                "stepStatus": 1
            },
            {
    
    
                "stage": 3,
                "explain": "拆条结果297条",
                "stepName": "智能拆条",
                "createTime": 1594034650094,
                "stepStatus": 1
            },
            {
    
    
                "stage": 3,
                "explain": "标签结果6条",
                "stepName": "智能标签",
                "createTime": 1594034622152,
                "stepStatus": 1
            }],
        "status": 1
    }]

모든 세부 배열에서 모든 단계의 값을 가져옵니다.

select media_id as mediaId, task_content->'$[*].detail[*].stepStatus' as statusList from hisi_task_process
where media_id = '8a0cb043-98cd-4e60-b633-8309715bcea6'

여기에 사진 설명 삽입
[*] 배열의 색인을 채울 수 있으며 배열의 첫 번째 값을 찾을 수 있습니다.

추천

출처blog.csdn.net/qq_32115447/article/details/106625188