php - 数据表未显示来自查询的所有数据
问题描述
我有一个产生正确结果的查询,之后我可以显示记录但不是我想要的格式。工作格式是学生姓名,年级。我只想连续显示一次学生姓名,然后显示每个年级。我的代码在显示表格时会丢失数据。
第一行丢失 0 个条目。第 2 行丢失 1 个条目。第 3 行丢失 2 个条目。这种模式一直持续到查询没有更多数据要获取。我有以下代码。
$sql = "SELECT CONCAT(s.last_name, ', ',s.first_name) AS 'Student Name',g.grade
FROM `grades` g
JOIN assignments a ON a.assignment_id=g.assignment_id
JOIN teacher t ON t.teacher_id=a.teacher_id
JOIN students s ON s.student_id=g.student_id
WHERE a.teacher_id='" . $_SESSION['userId'] . "'
AND a.subject_id='2'
ORDER BY s.last_name ASC";
$sqlCount = "SELECT COUNT(assignment_name)
FROM `assignments`
WHERE subject_id = '2'
AND teacher_id= '" . $_SESSION['userId'] . "';";
//gets the number of assignments so it can display the table
$resultCount = mysqli_query($connection, $sqlCount);
$countNum = mysqli_fetch_assoc($resultCount);
$counter = $countNum['COUNT(assignment_name)'];
$result = mysqli_query($connection, $sql);
while($row2 = mysqli_fetch_assoc($result)){
if($counter == 0){
echo"<tr><td>{$row2['Student Name']}</td>";
echo"<td>{$row2['grade']}</td>";
$counter++;
} else if($counter < $countNum['COUNT(assignment_name)']){
echo"<td>{$row2['grade']}</td>";
$counter++;
} else{
$counter = 0;
echo"</tr>";
}
}
解决方案
这似乎要简单得多。
$sql = "SELECT CONCAT(s.last_name, ', ',s.first_name) AS StudentName,g.grade
FROM `grades` g
JOIN assignments a ON a.assignment_id=g.assignment_id
JOIN teacher t ON t.teacher_id=a.teacher_id
JOIN students s ON s.student_id=g.student_id
WHERE a.teacher_id='" . $_SESSION['userId'] . "'
AND a.subject_id='2'
ORDER BY s.last_name,s.first_name ASC";
$result = mysqli_query($connection, $sql);
$last_stud = null;
while($row2 = mysqli_fetch_assoc($result)){
if($last_stud != $row2['StudentName']){
// close previous <tr>
if ( $last_stud !== null ) {
echo '</tr>';
}
$last_stud = $row2['StudentName'];
echo"<tr><td>{$row2['StudentName']}</td>";
echo"<td>{$row2['grade']}</td>";
} else {
echo"<td>{$row2['grade']}</td>";
}
}
echo '</tr>';
推荐阅读
- c++ - 如何在tabview Qt中设置一个新项目,并保存以前的项目
- mysql - 使用 Laravel 将图片存储到 mysql
- c# - 双引号之间的目录路径,但意外的标记再次“追加”
- validation - Sweetalert2 多输入验证
- c# - 表不使用 DateTimePicker 过滤按钮单击
- mongodb - Docker 中的 Mongo + 播种机
- rest - 在 Spring Boot 中避免在 rest 控制器中出现相同的 post 请求
- java - 带队列的 RoundRobin 算法
- java - Proguard 保持枚举常量名称
- sql - Spark中聚合时的条件