从3个表到多个表的嵌套json响应

时间:2017-02-14 19:45:09

标签: mysql json database optimization database-design

我正在以下列方式设计数据模型:

  

表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

1 个答案:

答案 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";