将多个mysql结果分组为一个列值

时间:2016-07-24 14:36:40

标签: php mysql arrays json

我试图从mysql表中获取所有结果并转换为Json格式。每行可以包含公共列值(movie_name)。我想通过该共同字段对结果进行分组。

这是我对此查询的第一个结果

$slots = SELECT movie_name,id as slot_id,screen_id,time,price FROM `slots`;

结果:

{
        "movies": [
            {
                "movie_name": "iceage",
                "slot_id": "142",
                "screen_id": "45",
                "time": "6.00",
                "price": "204"
            },
            {
                "movie_name": "lights out",
                "slot_id": "146",
                "screen_id": "45",
                "time": "11.00",
                "price": "150"
            },
            {
                "movie_name": "lights out",
                "slot_id": "147",
                "screen_id": "45",
                "time": "2.00",
                "price": "103"
            },
            {
                "movie_name": "conjuring",
                "slot_id": "148",
                "screen_id": "45",
                "time": "9.00",
                "price": "500"
            },
            {
                "movie_name": "iceage",
                "slot_id": "151",
                "screen_id": "45",
                "time": "",
                "price": "11"
            },
            {
                "movie_name": "lights out",
                "slot_id": "155",
                "screen_id": "45",
                "time": "11",
                "price": "11"
            }
        ]
}

我想改变上面的结果: -

{
    "movies": [
            {
                "movie_name": "lights out",
                "slots":[ {
                    "slot_id": "146",
                    "screen_id": "45",
                    "time": "11.00",
                    "price": "150"
                }
                {
                    "slot_id": "147",
                    "screen_id": "45",
                    "time": "2.00",
                    "price": "103"
                }
                {
                    "slot_id": "155",
                    "screen_id": "45",
                    "time": "11",
                    "price": "11"
                }
               ]
            },
            {
                "movie_name": "conjuring",
                "slots": {
                    "slot_id": "148",
                    "screen_id": "45",
                    "time": "9.00",
                    "price": "500"
                }
            },
            {
                "movie_name": "iceage",
                "slots":[ {
                    "slot_id": "142",
                    "screen_id": "45",
                    "time": "6.00",
                    "price": "204"
                }
                {
                    "slot_id": "151",
                    "screen_id": "45",
                    "time": "",
                    "price": "11"
                }
               ]
            },
        ]
  }

我应该如何更改查询以获得上述结果。我试过这个PHP代码:

                            foreach ($slots as $row) {
                                $movie_name = $row['movie_name'];
                                if (!isset($groups[$movie_name])) {
                                    $groups[$movie_name] = array();
                                }
                            $groups[$movie_name][] = $row;
                            }

但没有获得所需的结果。请帮忙。谢谢..

1 个答案:

答案 0 :(得分:0)

$json_arr = array("movies"=>array());
foreach ($slots as $slot) {
    $json_arr['movies'][$slot["movie_name"]]['movie_name'] = $slot["movie_name"];
    $json_arr['movies'][$slot["movie_name"]]['slots'][] = array (
        "slot_id" => $slot["slot_id"],
        "screen_id" => $slot["screen_id"],
        "time" => $slot["time"],
        "price" => $slot["price"]
    );
}