Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用json fromat-PHP-mySQL从数据库中获取所有饮料及其成分_Php_Mysql_Sql_Json - Fatal编程技术网

使用json fromat-PHP-mySQL从数据库中获取所有饮料及其成分

使用json fromat-PHP-mySQL从数据库中获取所有饮料及其成分,php,mysql,sql,json,Php,Mysql,Sql,Json,我用mySQL创建了一个简单的数据库: 表-饮料:id,姓名 表-成分:id、名称 表-饮料配料:饮料id,配料id 我想进行一个查询并获得类似以下格式的json: [{ "id": "000a1", "name": "Mojito", "ingredients": [{ "id": "000i1", "name": "Lime" }, { "id": "000i2", "name": "Bacardi" }] }, {

我用mySQL创建了一个简单的数据库:

  • 表-饮料:id,姓名

  • 表-成分:id、名称

  • 表-饮料配料:饮料id,配料id

  • 我想进行一个查询并获得类似以下格式的json:

    [{
      "id": "000a1",
      "name": "Mojito",
      "ingredients": [{
          "id": "000i1",
          "name": "Lime"
      }, {
          "id": "000i2",
          "name": "Bacardi"
      }]
    
     }, {
      "id": "000d2",
      "name": "Cuba Libre",
      "ingredients": [{
          "id": "000i3",
          "name": "Rum"
      }, {
          "id": "000i4",
          "name": "Cola"
      }]
    
    }]


    我怎样才能做到这一点?我是否应该先请求获取所有饮料,然后遍历所有饮料,再请求内部获取其成分?我还需要相应的PHP对象来处理数据,然后打印JSON,还是不重要?

    首先获取所需的数据:

    $drinks = array();
    $i = 0;
    $sql = "SELECT id,name FROM drinks";
    //conn is your database connect variable
    $result = $conn->query($sql);
    foreach($result as $v=>$row){
       $drinks[$i]['name'] = $row["name"];
       $drinks[$i]['id'] = $row["id"];
       $drinks[$i]['ingredients'] = array();
       $j = 0;
       $sql2 = "SELECT ingredients_id, name FROM drink_Ingredients INNER JOIN ingredients on drink_Ingredients.ingredients_id=ingredients.id";
       $result2 = $conn->query($sql2);
       foreach($result2 as $v2=>$row2){
           $drinks[$i]['ingredients'][$j]['id'] = $row2["ingredients_id"];
           $drinks[$i]['ingredients'][$j]['name'] = $row2["name"];
           $j++;
       }
       $i++
    }
    
    获得饮料数组后,需要生成json:

    $json = json_encode($drinks);
    

    仅此而已:)

    “我是否应该先请求获取所有饮料,然后遍历所有饮料,并在其中发出另一个请求以获取其成分?我是否还需要相应的PHP对象来处理数据,然后打印JSON”。。。是和否。你可以编写一个连接查询来实现这个结果集。它工作得很好!你节省了我很多时间。谢谢你,罗伯特!