php - PHP 中两个 mysql 表的 Json

标签 php mysql json

我正在尝试从两个相关的 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/

相关文章:

java - Hibernate Session.SaveOrUpdate 方法在每个项目之前调用 select - 有没有办法对这些选择进行批处理?

javascript - 带有单选按钮的 JSON 到 Html 表

php - 如何从android向PHP服务器发送数据

php - 我可以在 PHP 中混合使用 MySQL API 吗?

mysql 查询列中的相等值

mysql表设计

php - 如何检查是否在 php 中选中了复选框/单选按钮

php - Html/Php 表单未添加到 SQL 数据库

c# - 将具有关系的数据集转换为嵌套的 json

javascript - 在 Node.js 中迭代大量 JSON 文件