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

如何将SQL group_concat拼接的成绩在表格同一列单独展示

方案1:保留现有SQL逻辑,拆分拼接后的成绩字符串

你现有逻辑中通过group_concat将成绩拼接为逗号分隔的字符串,只需在输出时拆分字符串,循环渲染每个成绩为独立元素即可,同时记得补充subject_type=1的过滤条件满足需求:

<?php 
$sqltest1 = "SELECT s.id AS id,  s.name AS name, group_concat(g.grade SEPARATOR ',') as grades, s.teacher_1 as teacher_1
FROM subjects s 
INNER JOIN grades g ON (g.subject_type = s.subject_type)
WHERE s.subject_type = 1
GROUP BY s.id"; 
?>

表格输出部分修改成绩列的渲染逻辑:

while($row = $result->fetch_assoc()) {
    echo "<tr>";
    echo "<td scope='row'>". $i ."</td>";
    echo "<td>". $row['name'] ."</td>";
    echo "<td>";
    // 拆分成绩字符串为数组
    $gradeList = explode(',', $row['grades']);
    foreach($gradeList as $gradeItem) {
        // 每个成绩输出为独立标签,可自行调整样式类
        echo "<span class='bg-primary me-1 d-inline-block'>{$gradeItem}</span>";
    }
    echo "</td>";
    echo "<td class='text-center'>". $row['teacher_1']."</td>";
    echo "</tr>";
    $i++;
}

方案2:优化SQL,无需拼接字符串直接查询单条成绩记录

如果不需要同科目所有成绩合并在同一行,可去掉group_concat和分组逻辑,每条成绩对应单独表格行:

<?php 
$sqltest1 = "SELECT s.id AS id,  s.name AS name, g.grade as grade, s.teacher_1 as teacher_1
FROM subjects s 
INNER JOIN grades g ON (g.subject_type = s.subject_type)
WHERE s.subject_type = 1"; 
?>

输出逻辑直接读取单条成绩即可:

while($row = $result->fetch_assoc()) {
    echo "<tr>";
    echo "<td scope='row'>". $i ."</td>";
    echo "<td>". $row['name'] ."</td>";
    echo "<td><span class='bg-primary'>". $row["grade"] ."</span></td>";
    echo "<td class='text-center'>". $row['teacher_1']."</td>";
    echo "</tr>";
    $i++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:24:05