Heim > Fragen und Antworten > Hauptteil
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粉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一个>