首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MYSQL和PHP按字段数据对结果进行分组

MYSQL和PHP按字段数据对结果进行分组
EN

Stack Overflow用户
提问于 2011-08-08 01:49:10
回答 1查看 1.3K关注 0票数 0

我正在尝试基于数据库中日志中的数据创建报告,如下所示:

id |第一个学生分数|第二个类型分数|第二个分数

1%至23494 %;CAT1%;%50%;

*2*

3个月:23494个月;CAT2个月;35个月。

4个月:23495个月;中期:40个月

到目前为止,我的select语句如下所示:

代码语言:javascript
运行
复制
$res = @mysqli_query ($dbc, "SELECT id, student, type, GROUP_CONCAT(marks) AS mark, GROUP_CONCAT(type) AS types FROM log WHERE class = '1' AND term = '2' GROUP BY student DESC");

// Fetch and print all the records....<br>
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {

        echo '<tr>
            <td align="left">'. $row['student'] .'</td>';

        //$exams = split(",", $row['exams']); // 4,3,1,2
        $marks = split(",", $row['mark']); // 10,20,40,50

        foreach( $marks as $mark ) {
             echo '
                   <td align="left">' . $mark . '</td>
                ';
        }

        echo '</tr>';

} //End LOOP

//Then i end table

到目前为止,数据显示如下:

学生| CAT1 | CAT2 |期中考试

23494元人民币,50元人民币,50元人民币,35元人民币

23495元人民币,20元人民币,20元人民币,40元人民币。

问题是代码没有根据“类型”排列“标记”(查看id4的中期输出和相应的显示)。

问题:

如何按学生显示结果,后跟相应单元格/组中的标记,如下所示:?

学生| CAT1 | CAT2 |期中考试

23494元人民币,50元人民币,50元人民币,35元人民币

23495元人民币*40

提前谢谢各位。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-08 05:26:15

首先,尽量让逻辑远离布局。通常,最好的做法是首先收集所需的数据,然后将其显示出来。

使用GROUP_CONCAT可能会使事情变得更加复杂,因为您不知道每个学生将获得多少结果,也无法轻松识别哪些分数属于哪种类型。

考虑到这一点,我创建了一个解决方案。当然,您仍然需要扩展查询。

代码语言:javascript
运行
复制
$query = 'SELECT student, type, marks FROM log';
$res = mysqli_query($query);
$studentMarks = array();

while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC))
{
    $studentMarks[$row['student']][$row['type']] = $row['marks'];
}

// Now $studentMarks should look like:
// $studentMarks = array(
//    23494 => array('CAT1' => 50, 'CAT2' => 35)
//  , 23495 => array('CAT1' => 20, 'MIDTERM' => 40)
// );    

echo '<table><thead><tr>';
echo '<td>Student</td><td>CAT1</td><td>CAT2</td><td>MIDTERM</td>';
echo '</tr></thead><tbody>';

foreach($studentMarks as $studentId => $marks)
{
    echo '<tr>';
    echo '<td>', $studentId, '</td>';
    echo '<td>', (isset($marks['CAT1']) ? $marks['CAT1'] : '&nbsp;'), '</td>';
    echo '<td>', (isset($marks['CAT2']) ? $marks['CAT2'] : '&nbsp;'), '</td>';
    echo '<td>', (isset($marks['MIDTERM']) ? $marks['MIDTERM'] : '&nbsp;'), '</td>';
    echo '</tr>';
}
echo '</tbody></table>';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6974586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档