【问题标题】:PHP Join MySQL Tables, Output Formatted JSONPHP 加入 MySQL 表,输出格式化的 JSON
【发布时间】:2015-01-29 17:03:28
【问题描述】:

我很难尝试在我的 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 格式的正确方向上推动我,或者如果我一起朝着错误的方向前进,也许可以建议一种替代方法?

【问题讨论】:

    标签: php mysql json


    【解决方案1】:

    Push_back 循环内的每个任务:

    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']
      );
    }
    

    这样,tasks 实际上是一个数组

    您也需要检索其他表列

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

    【讨论】:

    • 您的解决方案非常完美。由于productstasks 表共享id 字段,我只需要对我的数据库结构进行一次调整。我更改了tasks 表的字段名称,瞧!感谢您的快速回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多