我正在尝试从两个相关的 MySQL 表构建 json 输出。 我有一个“餐厅”表和“菜肴”表,餐厅表中的每个项目在菜肴表中都有几个相关项目,这些项目由 id 引用。每个餐厅项目 ID 都是 Dishes 表中的外键 f_id。
例如: 餐厅表
+----+-------------+-----------+
| Id | Name | Misc Info |
+----+-------------+-----------+
| 1 | Restaurant1 | Some Info |
+----+-------------+-----------+
菜品表
+----+------+-----------+-------------+
| Id | f_id | dish | description |
+----+------+-----------+-------------+
| 1 | 1 | DishName | DishDesc. |
| 2 | 1 | DishName2 | DishDesc. |
+----+------+-----------+-------------+
我想创建一个从这些表到表的 JSON 输出,如下所示:
{
"Restaurants": [
{
"name": "String content",
"misc info": "String content"
"Dishes": [
{
"dish": "String content",
"description": "String content"
},
{
"dish": "String content",
"description": "String content"
}
],
},
{
"name": "String content",
"misc info": "String content"
"Dishes": [
{
"dish": "String content",
"description": "String content"
},
{
"dish": "String content",
"description": "String content"
}
],
}
]
}
我正在使用 PHP 和 mysql_query 方法来弄清楚逻辑,我计划在生产版本中使用 PDO。这是我迄今为止尝试过的代码。
//Create Our Query
$srtResult = "SELECT * FROM Restaurants";
//Execute Query
$result=mysql_query($srtResult);
//Iterate Throught The Results
while ($row = mysql_fetch_assoc($result)) {
$count = $row['id'];
$srtResult2 = "SELECT * FROM Dishes WHERE id = $count";
$result2 = mysql_query($srtResult2);
while(mysql_num_rows($result2)){
$dishes = mysql_fetch_row($result2);
$dishList[] = Array(
"dish" => $dishes[3],
"description" => $dishes[4]);
}
$json['Restaurants'][] =
Array("Restaurants" => Array(
"name" => $row['name'],
"Dishes" => Array(
$dishList)));
}
header('Content-type: application/json');
echo json_encode($json);
我遇到的问题是菜肴不会根据当前餐厅项目迭代,对于每个餐厅项目,我从第一家餐厅获取菜肴。 我认为问题在于循环本身,因为我在每个餐厅包装器中得到不同的 int 计数。任何帮助将不胜感激,我已经为此工作了几天,并且已经用尽了我的基本 PHP 知识。
最佳答案
您正在使用大量查询。为什么不在单个查询中执行此操作?
SELECT * FROM `Restaurants` `r`
LEFT JOIN `Dishes` `d` ON (`r`.`id` = `d`.`f_id`)
ORDER BY `r`.`id` ASC
然后使用结果构建 JSON 对象。
编辑
为了更容易迭代结果,我将查询更改为:
SELECT
`r`.`id` as `restaurantId`,
`r`.`name`,
`r`.`info`,
`d`.`id` AS `dishId`,
`d`.`dish`,
`d`.`description`
FROM `restaurants` `r`
LEFT JOIN `dishes` `d` ON (`r`.`id` = `d`.`f_id`)
ORDER BY `r`.`id` ASC
结果将如下所示:
restaurantId、名称、信息、dishId、菜品、描述
您现在可以像这样迭代结果:
$jsonArray = array();
foreach ($record as $dishDetails){
// details of the restaurant
$jsonArray[$dishDetails['f_id']]['name'] = $dishDetails['name'];
$jsonArray[$dishDetails['f_id']]['info'] = $dishDetails['info'];
// build the dishes of the restaurant
$jsonArray[$dishDetails['f_id']]['dishes'][$dishDetails['dishId']]['dish'] = $dishDetails['dish']
$jsonArray[$dishDetails['f_id']]['dishes'][$dishDetails['dishId']]['description'] = $dishDetails['description']
}
关于php - PHP 中两个 mysql 表的 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864371/