我执行了这个查询
$sql = "
SELECT cls
, sctn
, COUNT(case when gender='M' then 1 end) boys
, COUNT(case when gender='F' then 1 end) girls
FROM student_table
WHERE active = 1
group
by cls
, sctn";
$stmt->query($sql)->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
然后我得到了这个结果
Array
(
[1st] => Array(
[0] => Array (
[sctn] => A
[boys] => 8
[girls] => 7
)
[1] => Array (
[sctn] => B
[boys] => 5
[girls] => 4
)
)
[2nd] => Array (
[0] => Array (
[sctn] => A
[boys] => 3
[girls] => 7
)
[1] => Array (
[sctn] => B
[boys] => 8
[girls] => 5
)
)
[3rd] => Array (
[0] => Array (
[sctn] => A
[boys] => 9
[girls] => 11
)
[1] => Array (
[sctn] => B
[boys] => 5
[girls] => 17
)
)
)
但我期待的结果是
Array
(
[1st] => Array(
[A] => Array (
[boys] => 8
[girls] => 7
)
[B] => Array (
[boys] => 5
[girls] => 4
)
)
[2nd] => Array (
[A] => Array (
[boys] => 3
[girls] => 7
)
[B] => Array (
[boys] => 8
[girls] => 5
)
)
[3rd] => Array (
[A] => Array (
[boys] => 9
[girls] => 11
)
[B] => Array (
[boys] => 5
[girls] => 17
)
)
)
在这里,我想根据类别、部门和性别来计算
我还需要 sctn 值作为嵌套数组的键
有什么方法可以根据我的SELECT
查询得到这个结果吗?
最佳答案
我可能错了,但我不认为 PDO::FETCH_GROUP
可以像这样处理多个组。
我认为您只需要一次将它的一行提取到您想要的结构中,而不是使用 fetchAll
。
$result = $pdo->query($sql);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$array[$row['cls']][$row['sctn']]['boys'] = $row['boys'];
$array[$row['cls']][$row['sctn']]['girls'] = $row['girls'];
}
关于php - 有没有办法用 PDO 获取按两列的值分组的关联数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46225425/