从MySQL嵌套的json字段中查询并返回json的子集
P粉265724930
P粉265724930 2024-03-28 12:06:49
[MySQL讨论组]

我有以下行:

id 产品日志 创建时间
1 <json字符串,见下文> 2022-07-13 07:13:00

示例 json 数据:

{
    "products": [
        {
            "logs": [{
                "log_time": "2022-07-13 01:30:00",
                "log_type": "manual",
                "log_info": "some text"
            }],
            "product_id": 123,
            "time": "2022-07-12 01:30:00"
        }, 
        {
            "logs": [],
            "product_id": 124,
            "time": "2022-07-13 01:31:00"
        }
    ]
}

例如搜索 product_id 124,它应该返回整行,但 json 字段只包含匹配的对象:

id 产品日志 创建时间
1 {"logs":[],"product_id":124,"time":"2022-07-13 01:31:00"} 2022-07-13 07:13:00

如果结果输出包含 json 的原始“形状”也很好:

{
    "products": [
        {
            "logs": [],
            "product_id": 124,
            "time": "2022-07-13 01:31:00"
        }
    ]
}

P粉265724930
P粉265724930

全部回复(1)
P粉129168206
SELECT test.id, 
       test.created_at, 
       JSON_OBJECT('products', JSON_ARRAYAGG(jsontable.log_data))
FROM test
CROSS JOIN JSON_TABLE(test.product_logs,
                      '$.products[*]' COLUMNS (log_data JSON PATH '$')) jsontable
WHERE jsontable.log_data->'$.product_id' = 124
GROUP BY 1,2

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=26541a1e241be02680ba97a78f0791 c2一个>

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号