You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP按TERM_CODE分组展示学生成绩单数据的实现求助

问题与解决方案

问题描述

我的数据库中有如下表格:

idTERM_CODECOURSE_TITLECOURSE_HOURSGRADE
555202210Calculus I3A
555202210Data Structure3A+
555202220Calculus II3A
555202220Software Engineering3B

我希望用PHP实现如下展示效果:

Transcript  
Id:555
TERM_CODE: 202210
COURSE_TITLECOURSE_HOURSGRADE
Calculus I3A
Data Structure3A+
TERM_CODE: 202220
COURSE_TITLECOURSE_HOURSGRADE
Calculus II3A
Software Engineering3B

成绩单展示效果示意图

原代码无法实现分组展示,代码如下:

<?php 
echo'  <table class="tab"  cellpadding="2" cellspacing="2" border="1"  >';
      
include 'db_conf.php';
$conn = sqlsrv_connect( $serverName, $connectionInfo); 
$tsql = "SELECT *FROM OPENQUERY (student, 'select * from INTEGRATION.TRANSCRIPT  where ID=555  ')ORDER BY TERM_DESC "; 
$stmt = sqlsrv_query( $conn, $tsql); 

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)){
    echo "</tr>";
    echo "<td>" .$row['TERM_CODE']."</td>";
    echo "<tr>";
           
    echo "<tr>";
    echo "<td>COURSE_TITLE</td>";
    echo "<td>COURSE_HOURS</td>";
    echo "<td>GRADE</td>";
          
    echo "</tr>";
          
    echo "<td>" .$row['COURSE_TITLE']."</td>";
    echo "<td>" .$row['COURSE_HOURS']."</td>";
    echo "<td>" .$row['GRADE']."</td>";
     
    echo "</tr>";
}

echo "</table>";
?>

修正后的代码

<?php
include 'db_conf.php';
$conn = sqlsrv_connect($serverName, $connectionInfo); 

// 查询数据并按学期代码排序,确保同学期记录连续
$tsql = "SELECT * FROM OPENQUERY (student, 'select * from INTEGRATION.TRANSCRIPT where ID=555 ') ORDER BY TERM_CODE"; 
$stmt = sqlsrv_query($conn, $tsql); 

// 按学期分组整理课程数据
$transcriptData = [];
$studentId = '';
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    $termCode = $row['TERM_CODE'];
    $studentId = $row['id'];
    
    $transcriptData[$termCode][] = [
        'COURSE_TITLE' => $row['COURSE_TITLE'],
        'COURSE_HOURS' => $row['COURSE_HOURS'],
        'GRADE' => $row['GRADE']
    ];
}

// 输出成绩单标题与学生ID
echo "<h3>Transcript</h3>";
echo "<p>Id: {$studentId}</p>";

// 循环输出每个学期的课程信息
foreach ($transcriptData as $termCode => $courses) {
    echo "<pre>TERM_CODE: {$termCode}</pre>";
    
    // 输出课程表格
    echo '<table class="s-table" cellpadding="2" cellspacing="2" border="1">';
    // 表头
    echo '<thead>
            <tr>
                <th>COURSE_TITLE</th>
                <th>COURSE_HOURS</th>
                <th>GRADE</th>
            </tr>
          </thead>';
    // 课程内容行
    echo '<tbody>';
    foreach ($courses as $course) {
        echo '<tr>
                <td>' . htmlspecialchars($course['COURSE_TITLE']) . '</td>
                <td>' . htmlspecialchars($course['COURSE_HOURS']) . '</td>
                <td>' . htmlspecialchars($course['GRADE']) . '</td>
              </tr>';
    }
    echo '</tbody></table><br>';
}

// 关闭数据库连接
sqlsrv_close($conn);
?>

修正说明

  1. 数据分组:先将所有查询结果按TERM_CODE分组存储,避免原代码中每条记录重复输出学期和表头的问题
  2. 逻辑分离:将数据获取、整理与页面输出逻辑分开,代码结构更清晰易维护
  3. 安全优化:添加htmlspecialchars()转义输出内容,防止XSS注入风险
  4. 资源优化:添加数据库连接关闭操作,合理释放资源

内容的提问来源于stack exchange,提问作者Maq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:05:32