php - 有没有办法用 PDO 获取按两列的值分组的关联数组?

标签 php mysql pdo

我执行了这个查询

 $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/

相关文章:

php - strcmp 等效于 PHP 中的整数 (strcmp)

mysql - Laravel mysql 如何计算同一查询中多个表的字段

php - 使用 $_SESSION 获取所有值

mysql - 准备好的语句相对于 PDO::quote 的安全优势

php - 发布多个同名字段

PHP password_verify 总是说密码有效,除非列为空

php - 如何使用 facebook WebDriver 获取 AJAX 页面的当前 HTML 源代码?

php - 如何使用pdo mysql在插入记录期间检查字段数据类型是否一致

php - 在属于和不属于的 3 个表中选择 mysql 数据?