2

我想知道这是否可能。

我有一个包含三列的表(也有一个 id 列,但在这里无关紧要):

[year] [month] [price]

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

结果将是这样的:

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

有什么方法可以直接使用 PDO,而不是使用 PHP 循环和创建它?

我尝试了 FETCH GROUP 获取模式,但没有成功。

4

2 回答 2

1

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

  • PDOStatement::fetch
  • 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);
于 2014-04-18T15:43:17.633 回答
-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 的当前实现不支持多维数组

于 2014-04-18T15:33:41.393 回答