我想知道这是否可能。
我有一个包含三列的表(也有一个 id 列,但在这里无关紧要):
[year] [month] [price]
如何生成合并年份和月份的数组?
结果将是这样的:
[
2011 => [Jan => price, Feb => price, etc.]
2012 [Jan => price, Feb => price, etc.]
]
有什么方法可以直接使用 PDO,而不是使用 PHP 循环和创建它?
我尝试了 FETCH GROUP 获取模式,但没有成功。
您将不得不遍历结构,从 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);
我能想到的最好的方法是
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 的当前实现不支持多维数组