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

标签 php mysql sql

我正在从一个表中检索所有记录以在 php 页面上回显它们,问题是表中有重复的 3 列具有相似值的行,有人可以帮我处理这段代码吗,我需要分组什么? group by 只检索到一行,请回复。分组依据的字段正在重复,添加新记录的字段是 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,而是将字符串添加到 $schools 关联数组:

if($levelID!=='7')
{
    $schools[$startYear.' - '.$finishYear.' '.stripslashes($row['secondarySchool']) . ' ' . $secondaryLevel][]=' in '.$secondarySubject.' - '.stripSlashes($secondaryGrade);
}

最后,在最后,迭代 $schools 关联数组并将字符串附加到 $html:

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 -->';
}

关于php - 从 mysql 表中检索所有行,但首先将它们分组以删除重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22409606/

相关文章:

php - 在 php/mysql 中使用子字符串在日期之间搜索

mysql - 如何在 SQL 中获取金额范围?

具有多个条件计数的 SQL Server Distinct 查询

java - PHP 从 Java DataOutputStream 读取输入流?

mysql - 发票和订阅的应用程序逻辑?

mysql - 如何将一个列中的所有值与另一个表中的列相乘?

sql - x = null 与 x IS NULL 之间的区别

php - 查询未在 PHP 中给出预期结果

php - MySQL - 基于另一个查询的查询

javascript - 如何删除Textarea中行之间的行间距?