使用MySQL JOINS创建嵌套或多维数组

时间:2015-07-24 01:55:08

标签: php mysql sql join multidimensional-array

我正在尝试使用MySQL加入6个不同的表,但有些表有嵌套或很多项。我试图让这些表看起来像下面的JSON示例。

我不知道任何好的数据库建模/架构软件或应用程序,所以这里是我的纯文本表格。如果您有任何建议,那将是很好听的,但我的主要问题是找到一种以嵌套格式连接这些表的方法。 PS我在OSX上

这是我的表格

/**
* survey_tbl                    <- has many
* survey_vs_template_tbl
* template_items_tbl            <- has many
* items_tbl
* template_item_response_tbl    <- has many
* responses_tbl
**/

所以在伪格式中,sql应该

  1. 搜索许多调查
  2. 循环每个调查并将其与之匹配 正确的模板
  3. 然后以模板形式获取许多项目
  4. 循环浏览每个模板,找到匹配的项目
  5. 然后获得许多响应模板
  6. 最后,循环通过每个响应模板来查找响应
  7. 所以我让SQL使用JOINS接收所有这些数据,但是将它嵌入数组是我的问题。

    $sql = "SELECT * FROM survey_tbl 
            INNER JOIN survey_vs_template_tbl ON survey_vs_template_tbl.survey_id = survey_tbl.survey_id
            INNER JOIN template_items_tbl ON template_items_tbl.template_id = survey_vs_template_tbl.template_id
            INNER JOIN items_tbl ON items_tbl.item_id = template_items_tbl.template_id
            LEFT OUTER JOIN template_item_response_tbl ON template_item_response_tbl.template_item_id = template_items_tbl.template_item_id
            LEFT OUTER JOIN responses_tbl ON responses_tbl.response_id = template_items_tbl.template_id
            WHERE client_id='{$this->userId}'";
    

    这是我的JSON示例。唯一使用模板表是将相应的模板与实际项匹配。

    {
      "surveys": [
        {
          "name": "some random survey",
          "due": "03/01/2016",
          "items": [
            {
              "itemId": 1,
              "itemTitle": "Did you have a good day?",
              "responses": [
                {
                  "responseId": 1,
                  "responseText": "Yes"
                }, 
                {
                  "responseId": 2,
                  "responseText": "No"
                } 
              ]
            }
          ]
        }
      ]
    }
    

    我知道我可以通过这些数据循环并加入我能做的事情,我只是觉得SQL会有某种嵌套功能。

0 个答案:

没有答案