我正在以下列方式设计数据模型:
表1:
id:号码 somedata:String
somedata:String表2:
id:号码 表1_id:数字
somedata:String
somedata:String
表3:
id:号码 表2_id:数字
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具有不同的字段,因此我无法将它们非规范化为单个表。
抱歉json格式不正确。无法弄清楚如何在这里展示它。
我已经看过这个问题了,我的问题与此不同:Nested JSON from 3 one-to-many Tables
编辑:我在这里得到了答案:https://dba.stackexchange.com/questions/164370/nested-json-response-from-3-one-to-many-tables
答案 0 :(得分:0)
我建议您首先对所有三个表执行联接,然后您可以根据需要操纵数据库查询的结果(取决于select语句),因为我看到您创建了表的json对象。有三个表Category Subcategory和Items,让我们看看我如何执行联接,然后根据要求获取json数据:-
$query = "SELECT
items.id, items.category_id, items.sub_category_id, items.price_per_quantity, items.discounted_price, items.total_quantity, items.image, items.status, items.name as name, sub_categories.name as sub_category_name, categories.name as category_name
FROM items
INNER JOIN sub_categories ON sub_categories.id = items.sub_category_id
INNER JOIN categories ON categories.id = items.category_id";