Mysql
來自 3 個一對多表的嵌套 json 響應
我正在按以下方式設計數據模型:
表一:
id:number
somedata:String
somedata:String
表2:
id: number
Table1_id: number
somedata: String
somedata: String
表 3:
id: number
Table2_id: number
somedata: String
第一個表以一對多的關係連接到第二個表。第二個表以一對多的關係連接到第三個表。我正在使用java,JPA。我必須通過以下格式通過 rest api 返回 JSON:
{ "table1_id": 1, "somedata": "somedata", "table2_data": [ { "table2_id": 1, "somedata": "somedata", "table3_data": [ { "table3_id": 1, "somedata": "somedata" }, { "table3_id": 2, "somedata": "somedata" } ] }, { "table2_id": 2, "somedata": "somedata", "table3_data": [ { "table3_id": 3, "somedata": "somedata" }, { "table3_id": 4, "somedata": "somedata" } ] } ] }
如果我使用 mysql 及以上表結構,我將需要使用最少 3 個數據庫呼叫來分別從 3 個表中獲取,並且必須構造我的 json。有沒有一種方法可以減少數據庫呼叫並減少建構 json 的工作量?我也願意更改數據庫(mysql)。我只需要快速、優化和最佳的解決方案。請注意,table1、table2 和 table3 具有不同的欄位,因此我不能將它們非規範化為單個表。
我已經看過這個問題,我的問題與此不同:https ://stackoverflow.com/questions/11047151/nested-json-from-3-one-to-many-tables
在 PostgreSQL 中:
SELECT row_to_json (r1.*) FROM ( SELECT table_1_id, somedata, array( SELECT row_to_json (r2.*) FROM ( SELECT table_2_id, somedata, array( SELECT row_to_json(r3.*, true) FROM ( SELECT table_3.table_3_id, table_3.somedata FROM table_3 WHERE table_3.table_2_id = table_2.table_2_id ORDER BY table_3_id ) r3 ) AS table_2_data FROM table_2 WHERE table_2.table_1_id = table_1.table_1_id ORDER BY table_2_id ) r2 ) AS table_2_data FROM table_1 ) AS r1
(有一些警告,因為你的第一級響應不是一個數組;我認為它應該)。
語法有點複雜,可以簡化