PHP加入MySQL表,输出格式化JSON

时间:2015-01-29 17:03:28

标签: php mysql json

我很难在我的PHP脚本中尝试加入两个MySQL表,然后将其格式化为JSON,以便在我的私有应用程序中通过javascript进行解释。该应用程序仅供我们的艺术团队对我们公司制作的各种产品进行编辑。

此过程的目的是创建需要注意的产品列表,以及"任务"在每个产品中,可以在完成后检查(因此"检查"字段)。

表的格式如下:

products表:

+------+-----------+-----------+---------+
|  id  |  task_id  |  product  |  notes  |
+------+-----------+-----------+---------+
|  10  |     1     |   Item 1  |         |
+------+-----------+-----------+---------+
|  11  |     2     |   Item 2  |         |
+------+-----------+-----------+---------+

tasks表:

+------+-----------+---------------+---------+
|  id  |  task_id  |      task     |  check  |
+------+-----------+---------------+---------+
|   1  |     1     |  Fix Box Art  |     0   |
+------+-----------+---------------+---------+
|   2  |     1     | Add Copyright |     1   |
+------+-----------+---------------+---------+
|   3  |     2     |  Update Text  |     0   |
+------+-----------+---------------+---------+

我已经能够使用以下代码加入PHP中的表:

SELECT 
   products.*, 
   GROUP_CONCAT(tasks.task, tasks.check) AS steps 
FROM products
LEFT JOIN task_steps ON products.task_id = task.task_id

在while循环中,我正在构建一个类似的数组:

$output[] = 
      array (
      "id" => $row['id'],
      "task_id" => $row['task_id'],
      "product" => $row['product'],
      "notes" => $row['notes'],
      "tasks" => $row['steps']
    );
然后我将数组输出为JSON:

echo json_encode($output);

这是我被困的地方。我已经能够输出一些JSON,但没有接近我正在寻找的东西。我正在寻找的格式如下所示:

[  
   {  
      "id":"10",
      "task_id":"1",
      "product":"Item 1",
      "notes":"",
      "tasks":[  
         {  
            "task":"Fix Box Art",
            "check":"0"
         },
         {  
            "task":"Add Copyright",
            "check":"1"
         }
      ]
   }
]

任何人都可以在正确的方向上推动我如何将表格数据格式化为所提到的JSON格式,或者如果我朝着错误的方向前进,可能会提出另一种方法吗?

1 个答案:

答案 0 :(得分:1)

推送循环中的每个任务:

while(...fetching) {

  if (!isset($output[$row['id']])) {
    $output[$row['id']] = array (
      "id" => $row['id'],
      "task_id" => $row['task_id'],
      "product" => $row['product'],
      "notes" => $row['notes'],
      "tasks" => array()
   );
  }

  $output[$row['id']]['tasks'][] = array(
    'task' => $row['task'],
    'check' => $row['check']
  );
}

通过这种方式,任务实际上是一个数组

您还需要检索其他表格列

SELECT 
   products.*,
   tasks.*      //<<--