【问题标题】:Is there a way to fetch associative array grouped by the values of a two colums with PDO?有没有办法使用 PDO 获取按两个列的值分组的关联数组?
【发布时间】:2018-02-23 19:27:55
【问题描述】:

我执行了这个查询

 $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查询得到这个结果?

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    我可能弄错了,但我认为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'];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 1970-01-01
      • 2019-09-17
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-05
      • 2020-10-24
      • 1970-01-01
      相关资源
      最近更新 更多