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

如何将数据库行值在HTML表格不同列展示?解决重复行问题

问题分析与修复方案

原代码核心问题

  • 循环内重复输出两行<tr>,直接造成表格行冗余重复
  • 错误用$row['mark']++和$row['out_of']++实现求和,这是自增操作而非累加计算
  • 硬编码重复输出同一mark值三次,未匹配实际数据展示逻辑
  • SQL未按学生分组,若学生有多条成绩记录会导致数据重复输出

修复后的完整代码

<?php
$servername = "localhost";
$username   = "root";
$password   = "";
$dbname     = "jion";

// 创建数据库连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接状态
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}
?>
<!DOCTYPE html>
<head>
    <title>学生数学成绩表</title>
</head>
<body>
    <table border="1">
        <tr>
            <th rowspan="2">序号</th>
            <th rowspan="2">学号</th> 
            <th rowspan="2">全名</th>
            <th colspan="3">数学科目成绩</th>
            <th>总分</th>
        </tr>
        <tr>
            <!-- 可根据实际业务调整子列名称,比如"单元测1""单元测2""单元测3" -->
            <th>测试1</th>
            <th>测试2</th>
            <th>测试3</th>
        </tr>
        <?php
        // 按学生分组查询,聚合成绩数据
        $sql = "SELECT 
                    s.index_number as id,
                    s.fname as first_name,
                    s.lname as last_name,
                    GROUP_CONCAT(m.mark ORDER BY m.id SEPARATOR ',') as marks,
                    SUM(m.mark) as total_mark
                FROM student_name s
                INNER JOIN mark m ON m.st_id = s.index_number
                INNER JOIN out_of o ON o.subject_id = m.subject_id 
                WHERE m.subject_id=1
                GROUP BY s.index_number, s.fname, s.lname";
                
        $result = mysqli_query($conn, $sql);
        $count = 0;
        if(mysqli_num_rows($result) > 0){
            while($row = mysqli_fetch_assoc($result)){    
                $count++;
                // 拆分成绩数组,不足3项补空保证排版整齐
                $marks = explode(',', $row['marks']);
                while(count($marks) < 3) {
                    $marks[] = '';
                }
                ?>
                <tr>
                    <td><?php echo $count; ?></td>
                    <td><?php echo $row['id']; ?></td>
                    <td><?php echo $row['first_name'] . ' ' . $row['last_name']; ?></td>
                    <td><?php echo $marks[0]; ?></td>
                    <td><?php echo $marks[1]; ?></td>
                    <td><?php echo $marks[2]; ?></td>
                    <td><?php echo $row['total_mark']; ?></td>
                </tr>
            <?php 
            } 
        } 
        // 关闭数据库连接
        mysqli_close($conn);
        ?>
    </table>
</body>

关键调整说明

  1. SQL优化:用GROUP BY按学生分组,GROUP_CONCAT收集该学生所有数学成绩,SUM直接计算总分,从根源避免数据重复
  2. 表格结构修正:补充表头第二行的子列,确保数据行列数与表头对应,删除原代码中多余的重复行
  3. 成绩处理:将聚合后的成绩拆分为数组,不足3项时补空,保证表格排版整齐
  4. 求和逻辑修正:直接使用SQL聚合的SUM结果,替代原代码中错误的自增操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:01:40