Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 3个一对多表的嵌套json响应_Mysql_Json_Database_Optimization_Database Design - Fatal编程技术网

Mysql 3个一对多表的嵌套json响应

Mysql 3个一对多表的嵌套json响应,mysql,json,database,optimization,database-design,Mysql,Json,Database,Optimization,Database Design,我以以下方式设计数据模型: 表1: id:编号 somedata:String somedata:String 表2: id:编号 表1\u id:编号 somedata:String somedata:String 表3: id:编号 表2\u id:编号 somedata:String 第一个表通过一对多关系连接到第二个表。第二个表通过一对多关系连接到第三个表。我正在使用java,JPA。我必须通过rest api以以下格式返回JSON: { "table1_id": 1, "som

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

表1:
id:编号
somedata:String
somedata:String

表2:
id:编号
表1\u id:编号
somedata:String
somedata:String

表3:
id:编号
表2\u 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)。我只需要快速、优化和最佳的解决方案。注意,表1、表2和表3有不同的字段,所以我不能将它们反规范化为单个表

很抱歉json格式错误。我不知道怎么在这里展示

我已经看到了这个问题,我的问题与此不同:


编辑:我在这里得到了答案:

我建议您首先执行三个表中的join,然后您可以操作数据库查询的结果(取决于select语句)根据您的要求,我看到您创建了一个表的json对象。例如,有三个表类别子类别和项,让我们看看我如何执行连接,然后根据要求获取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";

我觉得我可以在这里使用mongodb。我将以我想要检索的方式存储文档。这可以在单个数据库调用中完成。为什么不使用联接来减少数据库调用?联接的结果将为表2中的多个记录提供表1的重复结果,与表2和表3相同。从这个响应中形成嵌套的JSON将再次变得困难。我想要的JSON格式如问题中所示。您可以根据表id对结果集进行排序,并开发一个小算法来格式化JSON。谢谢Gabriele。但我也希望避免json的构建。请披露任何内容,不要将该网站用作通过发布来推广你的网站的方式。看见