Php mysql内部连接中的while循环

Php mysql内部连接中的while循环,php,mysql,loops,join,Php,Mysql,Loops,Join,我的代码使用内部联接联接4表。使用内部联接时无法自定义循环。如何控制while子句,使不需要的循环不会发生 我的代码输出学生和学校名称在每个科目字段中循环 我想这样显示,学生和学校同时循环 我的PHP代码 尝试向查询中添加订单依据: $query=$con->prepare("SELECT subjectcomb.subjectid, subjectcomb.schoolid, student.student, school.school, subject.name FR

我的代码使用内部联接联接4表。使用内部联接时无法自定义循环。如何控制while子句,使不需要的循环不会发生

我的代码输出学生和学校名称在每个科目字段中循环

我想这样显示,学生和学校同时循环

我的PHP代码

尝试向查询中添加订单依据:

$query=$con->prepare("SELECT subjectcomb.subjectid, subjectcomb.schoolid, student.student, school.school, subject.name 
        FROM ((( subjectcomb
        INNER JOIN school ON subjectcomb.schoolid=school.id)
        INNER JOIN student ON subjectcomb.schoolid=student.schoolID)
        INNER JOIN subject ON subjectcomb.subjectid=subject.id)
        ORDER BY school.school, student.student");
然后在while循环中使用此检查:

<?php
$last_student = ""
while ($row = $query->fetch(PDO::FETCH_ASSOC)){
    if ($last_student != $row['student']) {
?>
    <tr>
        <td>
            <?php echo $row['school']."->".$row['student']?>
        </td>
    </tr>
    <?php } ?>
    <tr>
        <td>
            <?php echo $row['name']?>
            <input type="text" name="mark"></input>
        </td>           
    </tr>
<?php $last_student = $row['student'] } ?>

我想菲尔的意思是这样的。您可以跟踪以前的学校和学生。如果当前学校和学生与上一个学校和学生相同,则跳过打印学校/学生行,但如果它们不相同,则打印它们并更新上一个学校和上一个学生的值

$prev_school = '';
$prev_student = '';
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  if ($row['school'] != $prev_school && $row['student'] != $prev_student) { ?>
    <tr>
      <td>
        <?php echo $row['school']."->".$row['student'] ?>
      </td>
    </tr>
    <?php
    $prev_school = $row['school'];
    $prev_student = $row['student'];
  }
  ?>
  <tr>
    <td>
      <?php echo $row['name']?>
      <input type="text" name="mark"></input>
    </td>           
  </tr>
  <?php 
}

在第一个之前添加一个if判断,判断您是否已经输出了这个school->student可以解决这个问题。但我想你想用SQL命令来解决这个问题?你有没有试着在你的查询中使用group by student.student,SHOOL.SHOOL?@Phil如何在这种情况下应用if子句,请举例。@AnandaLC,Lucas Borges刚才给了你一个例子。这也是我的意思。谢谢你的回答
$prev_school = '';
$prev_student = '';
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
  if ($row['school'] != $prev_school && $row['student'] != $prev_student) { ?>
    <tr>
      <td>
        <?php echo $row['school']."->".$row['student'] ?>
      </td>
    </tr>
    <?php
    $prev_school = $row['school'];
    $prev_student = $row['student'];
  }
  ?>
  <tr>
    <td>
      <?php echo $row['name']?>
      <input type="text" name="mark"></input>
    </td>           
  </tr>
  <?php 
}