suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Abfrage aus dem in MySQL verschachtelten JSON-Feld und Rückgabe einer Teilmenge von JSON

Ich habe folgende Zeilen:

id Produktprotokoll Erstellungszeit
1 <JSON-String, siehe unten> 2022-07-13 07:13:00

Beispiel-JSON-Daten:

{
    "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"
        }
    ]
}

Wenn Sie beispielsweise nach product_id 124 suchen, sollte die gesamte Zeile zurückgegeben werden, aber das JSON-Feld enthält nur passende Objekte:

id Produktprotokoll Erstellungszeit
1 {"logs":[],"product_id":124,"time":"2022-07-13 01:31:00"} 2022-07-13 07:13:00

Es wäre auch schön, wenn die resultierende Ausgabe die ursprüngliche „Form“ von JSON enthalten würde:

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

P粉265724930P粉265724930316 Tage vor496

Antworte allen(1)Ich werde antworten

  • P粉129168206

    P粉1291682062024-03-29 00:02:15

    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

    Antwort
    0
  • StornierenAntwort