Pertanyaan daripada medan json bersarang MySQL dan kembalikan subset json
P粉265724930
P粉265724930 2024-03-28 12:06:49
0
1
467

Saya mempunyai baris berikut:

id Log Produk Masa penciptaan
1 <rentetan json, lihat di bawah> 2022-07-13 07:13:00

Contoh data 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"
        }
    ]
}

Sebagai contoh mencari product_id 124, ia sepatutnya mengembalikan keseluruhan baris, tetapi medan json hanya mengandungi objek yang sepadan:

id Log Produk Masa penciptaan
1 {"logs":[],"product_id":124,"time":"2022-07-13 01:31:00"} 2022-07-13 07:13:00

Alangkah baiknya jika output yang dihasilkan mengandungi "bentuk" asal json:

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

P粉265724930
P粉265724930

membalas semua(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一个>

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan