Php 从mysql表中检索所有行,但首先将它们分组以删除重复

Php 从mysql表中检索所有行,但首先将它们分组以删除重复,php,mysql,sql,Php,Mysql,Sql,我正在从一个表中检索所有记录,以便在php页面上回显它们,问题是表中重复的3列中有具有类似值的行,请有人帮助我编写这段代码,我需要对哪些行进行分组?该组仅检索到一行,请务必回复。按分组的字段将重复,添加新记录的字段为secondarySubject和secondaryGrade 我得到的结果是: --------------------------------- 2012-2013 School ABC A-Level in science A 2012-2013 School ABC A

我正在从一个表中检索所有记录,以便在php页面上回显它们,问题是表中重复的3列中有具有类似值的行,请有人帮助我编写这段代码,我需要对哪些行进行分组?该组仅检索到一行,请务必回复。按分组的字段将重复,添加新记录的字段为secondarySubject和secondaryGrade

我得到的结果是:

---------------------------------

2012-2013 School ABC A-Level 
in science A

2012-2013 School ABC A-Leve
 in maths B

2012-2013 School ABC A-Level
 in Eng C
-----------------------------------
我想要的是

----------------

2012-2013 School ABC A-Level
in science A
in maths B
in Eng C
-----------------------



$result2 = $db->query('

SELECT *

FROM secondaryEducation

WHERE userID = "'.$graduateID.'"

ORDER BY secondaryFinishDate DESC

');

$html .= '<h2>Secondary Education: '.$option.'</h2>';

    while($row = mysql_fetch_assoc($result2))

    {



        $startYear = formatDate($row['secondaryStartDate'], 'Y');

        $finishYear = formatDate($row['secondaryFinishDate'], 'Y');

        if (!empty($row['secondaryGrade']))

            $secondaryGrade = getSecondaryGradeName($row['secondaryGrade']);

        else

            $secondaryGrade = $row['secondaryGradeCustom'];

        if (!empty($row['secondarySubject']))

            $secondarySubject = getSecondarySubjectName($row['secondarySubject']);

        else

            $secondarySubject = $row['secondarySubjectCustom'];

            $score = $row['score'];

            $secondaryLevel = getSecondaryLevelName($row['secondaryLevel']);
            $levelID = getSecondaryLevelID($row['secondaryLevel']);
        if($levelID!=='7')
        {

        $html .= '



            <div class="secondaryListing">

                <div><strong>'.$startYear.' - '.$finishYear.' '.stripslashes($row['secondarySchool']).'</strong></div>

                <div>'.$secondaryLevel.' in '.$secondarySubject.' - '.stripSlashes($secondaryGrade).'</div>

            </div><!-- End education listing -->';
        }

在while循环之前,创建一个数组:

$schools = array();
while($row = mysql_fetch_assoc($result2))
...
将字符串添加到$html关联数组中,而不是附加到$html:

if($levelID!=='7')
{
    $schools[$startYear.' - '.$finishYear.' '.stripslashes($row['secondarySchool']) . ' ' . $secondaryLevel][]=' in '.$secondarySubject.' - '.stripSlashes($secondaryGrade);
}
最后,在最后,迭代$schools关联数组并将字符串附加到$html:


考虑提供适当的DDL和/或SqLFIDLE连同期望的结果集。还有一些示例数据。现在,请让我知道为for循环提供PHP代码-什么是$HTML之前。=“试图理解”。你是说你有多行2012-2013年学校ABC A-Level?但是你只想看一次?哦,我的天啊,它成功了,非常感谢,最后一件事请注意,第二级仍然在重复,请注意,我如何才能让它也出现一次?我编辑了答案-在if$levelID!='7'assignment我将变量$secondaryLevel从右边移到左边,从条目移到groupoops刚刚意识到条目在重复:有什么具体原因吗?这就像如果有4行,它会打印4次,最初是一条记录,然后是2条记录,直到4你的意思是“in.”$secondarySubject.'-'。stripSlashes$secondaryGrade包含在多个组中?
foreach($schools as $group => $entries)
{
    $html .= '<div class="secondaryListing"><div><strong>'.$group.'</strong></div>';
    foreach($entries as $entry) {
        $html .= '<div>'.$entry.'</div>';
    }
    $html .='</div><!-- End education listing -->';
}