使用PDO从查询创建多维数组

时间:2013-06-06 22:08:44

标签: php mysql pdo

我想知道这是否可能。

我有一个包含三列的表(也有一个id列,但这里不相关):

[year] [month] [price]

如何生成合并年份和月份的数组?

结果将是这样的:

[
2011 => [Jan => price, Feb => price, etc.]
2012 [Jan => price, Feb => price, etc.]
]

直接使用PDO,而不是使用PHP循环和创建它?

我已尝试过FETCH GROUP获取模式,但尚未成功。

2 个答案:

答案 0 :(得分:1)

您将不得不循环结构,从PDO结果中检索数据的唯一方法如下

  • PDOStatement对象::取
  • PDOStatement对象::使用fetchall
  • PDOStatement对象:: fetchColumn
  • PDOStatement对象:: fetchObject

这些都不会在多维数组中返回。

IMO是实现这一目标的最简单方法:

$db = new PDO(...);

$query = $db->query("
    SELECT 
        year, month, SUM(price) AS total_price
    FROM 
        table
    GROUP BY 
        year, month
");

$query->setFetchMode(PDO::FETCH_ASSOC);

$results = array();
while ($row = $query->fetch()) {
    list($year, $month, $totalPrice) = $row;

    if (!isset($results[$year])) {
        $results[$year] = array();
    } //if

    $results[$year][$month] = $totalPrice;

} //while

unset($query);
unset($db);

答案 1 :(得分:-1)

我能想到的最好的是

http://www.sqlfiddle.com/#!2/a87785/10/0

SELECT a.year, 
   Group_concat(a.arr) 
FROM   (SELECT year, 
           (SELECT Concat(sub.month, ' ', Group_concat(price)) 
            FROM   test sub 
            WHERE  sub.year = t.year 
                   AND sub.month = t.month 
            GROUP  BY month) AS arr 
    FROM   test t 
    GROUP  BY year, 
              month) a 
GROUP  BY a.year; 

但这意味着事后爆发。我很确定当前的PDO实现不支持多维数组