如何将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
相关产品推荐
相关产品推荐

