我想知道这是否可能。
我有一个包含三列的表(也有一个id列,但这里不相关):
[year] [month] [price]
如何生成合并年份和月份的数组?
结果将是这样的:
[
2011 => [Jan => price, Feb => price, etc.]
2012 [Jan => price, Feb => price, etc.]
]
直接使用PDO,而不是使用PHP循环和创建它?
我已尝试过FETCH GROUP获取模式,但尚未成功。
答案 0 :(得分:1)
您将不得不循环结构,从PDO结果中检索数据的唯一方法如下
这些都不会在多维数组中返回。
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实现不支持多维数组