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

标签 mysql json database optimization database-design

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

Table 1:
     id: number
    somedata: String
    somedata: String

Table 2:
    id: number
    Table1_id: number
    somedata: String
    somedata: String

Table 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 有不同的字段,因此我无法将它们非规范化为单个表。

抱歉,json 格式错误。无法弄清楚如何在此处显示它。

我已经看过这个问题,但我的问题与此不同:Nested JSON from 3 one-to-many Tables

编辑:我在这里得到答案:https://dba.stackexchange.com/questions/164370/nested-json-response-from-3-one-to-many-tables

最佳答案

我建议您首先对所有三个表执行连接,然后您可以根据您的要求操作数据库查询的结果(取决于您的选择语句),因为我看到您创建了表的 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";

关于mysql - 3 个一对多表的嵌套 json 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42234888/

相关文章:

php - 类似 MYSQL 的 2 个表搜索

java - 每次插入数据库时​​如何找到数据字段(例如电子邮件)的唯一性?

java - Hibernate 映射 - 一张表中的两个映射

java - 从 android 连接到 MySQL 数据库。没有迹象表明它正在工作/不工作......?

php - jQuery 使用 AJAX 显示从 PHP 文件获取的 PDF 数据

database - 如何找到选中的提交按钮的ID

mysql更新选择行号

mysql - 选择记录不是我的 friend

php - 如何使用 PHP + MySQL Ajax 获取 jQuery 自动完成功能并传递给 JavaScript

javascript - 类型错误无法设置未定义的属性 '_minWidth' - pdfmake,Angular 2