【问题标题】:Group multiple mysql result by one column value按一列值对多个mysql结果分组
【发布时间】:2016-11-27 22:29:08
【问题描述】:

我正在尝试从 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;
                            }

但没有得到所需的结果。请帮忙。谢谢你。。

【问题讨论】:

    标签: php mysql arrays json


    【解决方案1】:
    $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"]
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2021-12-09
      相关资源
      最近更新 更多