【问题标题】:How to group results in MySQL by using PHP array? [duplicate]如何使用 PHP 数组对 MySQL 中的结果进行分组? [复制]
【发布时间】:2016-11-07 18:39:56
【问题描述】:

我的数据库中有 2 个表。

表 A

StudentID      Name             Age
 1             John Doe         15
 1             John Doe         15
 2             Marry Smith      20

表 B

StudentID            Courses
  1                    Math
  1                    Science
  2                    Art

现在我使用 INNER JOIN 查询

$query = $db->prepare("Select a.studentid, a.name, a.age, b.studentid, b.courses FROM tableA a INNER JOIN TABLEB b ON a.studentid = b.studentid");
$query->execute();
$stmt = $query->fetchAll(PDO::FETCH_ASSOC);

$everything = array();
$groupArray = array();

foreach($stmt as $row){
    $everything[] = $row;
}

foreach($everything as $e){
    $groupArray[$e['studentid']][] = $e;
}

我得到的结果只是按学生ID分组

1 => array (size=2)
     0 => array (size=5)
       'StudentID' => string '1'
       'Name' => string 'John Doe'
       'Age' => string '15'
       'StudentID' => string '1'
       'Courses' => string 'Math'
     1 => array (size=5)
       'StudentID' => string '1'
       'Name' => string 'John Doe'
       'Age' => string '15'
       'StudentID' => string '1'
       'Courses' => string 'Science'

2 => array (size=2)
     0 => array (size=5)
       'StudentID' => string '2'
       'Name' => string 'Marry Smith'
       'Age' => string '20'
       'StudentID' => string '2'
       'Courses' => string 'Art'

我希望展示的是对它们进行分组,这样我就不会得到重复的学生。我怎样才能做到这一点?提前致谢

1 => array (size=2)
     0 => array (size=5)
       'StudentID' => string '1'
       'Name' => string 'John Doe'
       'Age' => string '15'

       'Courses' => array(
          0 => String 'Math'
          1 => String 'Science'
        )

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    先检查数组键是否存在:

    foreach($everything as $e){
        if(!isset($groupArray[$e['studentid']])) {
            $groupArray[$e['studentid']][] = $e;
        }
    }
    

    但请注意,您只会获得其中一个课程,例如Math,然后 Science 将被跳过,因为您的数组中已经有该学生的课程。

    如果您想保留班级信息,而不复制学生详细信息,那么您必须更深入:

    foreach($everything as $e){
        $id = $e['studentid'];
        if (!isset($groupArray[$id]) {
          ... first time seeing this student
            $groupArray[$id]['name'] = $e['name'];
            $groupArray[$id]['age'] = $e['age']
            $groupArray[$id]['classes'] = array();
        }        
        $groupArray[$id]['classes'] = .. details about class here ...;
    }
    

    【讨论】:

    • 这个解决方案部分对我有用,但还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多