将mysql结果(大关联数组)转换为嵌套数组

时间:2011-07-15 09:26:01

标签: php mysql sql

我有一个像这样的简单查询

SELECT hometeam.name AS hometeamName, hometeam.shortname AS hometeamShortName, 
       roadteam.name AS roadteamName, roadteam.shortname AS roadteamShortName, 
       smatch.startdate

FROM smatch 
    JOIN team hometeam
        ON smatch.hometeamid = hometeam.uid
    JOIN team roadteam
        ON smatch.roadteamid = roadteam.uid

默认返回一维数组,如下所示:

array(5) {
     ["homeTeamName"] => "Brasil"
     ["homeTeamShortName"] => "BRA"
     ["roadTeamName"] => "Norway"
     ["roadTeamShortName"]=> "NOR"
     ["startdate"]=> "1309709700"
}

问题是,是否有 mysql-way 让结果成为嵌套数组,其结构如下所示结构

result => 
    hometeam =>
        name
        shortname
    roadteam =>
        name
        shortname
    startdate

如果没有,是否有(php)后处理最佳实践来进行此转换?

非常感谢,
罗布森

3 个答案:

答案 0 :(得分:2)

我认为没有办法直接获得您想要的结果,但在查询后生成该数组并不难。

这样的东西?

foreach($rows as $row) {
  $resultArray[] = array(
    'hometeam' => array(
      'name' => $row['homeTeamName'], 
      'shortname' => $row['homeTeamShortName']
      ),
    'roadteam' => array(
      'name' => $row['roadTeamName'], 
      'shortname' => $row['roadTeamShortName']
      ),
    'startdate' => $row['startdate']
  );
}

答案 1 :(得分:1)

MySQL(或任何数据库)没有数组的概念。

我能想到的唯一方法是你需要在存储过程中执行它并以某种方式序列化结果 - 实质上是创建一个序列化的字符串......那么你需要重新构建它来自的数组。

然而,在PHP中这样做会更好,说实话,在SP中这样做的收益将是最小的。查询main然后使用PHP-side循环查询会更有效。

答案 2 :(得分:1)

您必须以PDO::FETCH_CLASS模式获取结果。

分别指定__set() - 方法,您可以按照自己喜欢的方式存储结果字段数据。

此类还应扩展ArrayAccess,以便您可以像数组一样访问它或让它返回一个。