来自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);

我的问题是,菜品不会根据当前餐厅的菜品进行迭代,对于每个餐厅菜品,我正在从第一家餐厅得到菜品。我认为问题出在循环本身,因为我在每个Restaurant包装器中得到的计数值都不同。任何帮助将不胜感激,我已经为此工作了几天,并且已经用尽了我的基本PHP知识。

德拉戈斯

您正在使用大量查询。为什么不在单个查询中这样做?

SELECT * FROM `Restaurants` `r`
    LEFT JOIN `Dishes` `d` ON (`r`.`id` = `d`.`f_id`)
ORDER BY `r`.`id` ASC 

然后使用结果来构建JSON对象。

EDIT 为了使迭代结果更容易,我将查询更改为:

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, name, info, dishId, dish, description

您现在可以像这样迭代结果:

$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']
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

php,来自两个表的MySql子查询

来自分类Dev

PHP,MySql来自两个表的总和

来自分类Dev

来自PHP的MySQL查询结合了两个表中的数据

来自分类Dev

比较来自MySQL的两个表

来自分类Dev

如何从MySQL PHP的两个表中搜索

来自分类Dev

显示两个表中的数据-PHP mySQL

来自分类Dev

PHP & MYSQL:在两个不同的表中插入记录

来自分类Dev

检查php mysql查询中的两个表值

来自分类Dev

MySQL一个结果来自同一表中的两个查询

来自分类Dev

PHP MYSQL新闻通讯,包含来自两个表的地址

来自分类Dev

PHP的MySQL获取两个表

来自分类Dev

比较来自不同表的两个值-MySQL

来自分类Dev

MySQL显示来自两个表的列,无需重复

来自分类Dev

用来自每个的数据更新两个mysql表

来自分类Dev

来自两个表的MySQL(条件查询)查询

来自分类Dev

来自两个表的MySQL ALL组合

来自分类Dev

来自两个不同表的MYSQL总和

来自分类Dev

MySQL合并来自两个表的数据

来自分类Dev

比较来自不同表的两个值-MySQL

来自分类Dev

来自两个表的MySQL单个结果

来自分类Dev

MySQL查询使用来自两个表的数据

来自分类Dev

在MySQL中,来自两个差异表的SELECT和COUNT

来自分类Dev

如何连接来自mysql中两个不同表的数据(LEFT JOIN)?

来自分类Dev

使用PHP在dropdownlist中显示来自两个不同表的值

来自分类Dev

两个表中的MySQL比较

来自分类Dev

在MySQL中合并两个表

来自分类Dev

两个表中的MySQL查询

来自分类Dev

PHP从两个表中搜索

来自分类Dev

来自两个列表的Python 3.3中的表