PHP 连接 MySQL 表,输出格式化 JSON

标签 php mysql json

我在尝试在 PHP 脚本中连接两个 MySQL 表,然后将其格式化为 JSON 以便在我的私有(private)应用程序中由 javascript 解释时遇到了困难。该应用程序仅供我们美术团队对我们公司生产的各种产品进行编辑。

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

表格的格式如下:

产品表:

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

任务表:

+------+-----------+---------------+---------+
|  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 格式,或者如果我一起朝着错误的方向前进,也许可以建议一种替代方法?

最佳答案

将循环中的每个任务推回:

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.*      //<<--

关于PHP 连接 MySQL 表,输出格式化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28220417/

相关文章:

php - $_POST 和 $_GET 转换报价( ' ) to backslash + quote (\')

php - 根据另一列的值按不同列排序

php - 通过 PHP 从 MySQL 导出到 CSV

php - 将 mysql 命令中声明的计算更新到 mysql 中的表中

json - 如何在 Jekyll 中从 JSON 加载数据

java - 无法序列化 MongoDB 中的类 Java 和字符串被编码

php - 如何保存推送通知的设备 ID - iOS

php - 如何在 php 中获取我的工作文件夹的路径?

php - 尝试结合两个 Codeigniter 脚本,将数据从 mysql 导出到 excel

json - 让 jackson 忽略序列化为 json 时延迟初始化的字段