我在尝试在 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/