在外键上使用“NULL”条目

时间:2018-02-01 08:18:10

标签: php mysqli many-to-many

美好的一天。我想就此事寻求帮助:

<?php
$classes = "SELECT * FROM students, lectures, rooms, classes WHERE 
students.student_id=classes.student_id AND 
lectures.lecture_id=classes.lecture_id AND rooms.room_id=classes.room_id";

$class_result = mysqli_query($con, $classes);
?>

这是关于phymyadmin的表格:

|--class_id--|--student_id--|--lecture_id--|--room_id--|
|     2      |(1)  Goku     |(1) Physics   |    NULL   |
|     3      |(2)Leonardo   |(2) Science   |(1) 101    |
|     5      |(2)Leonardo   |(3)  Math     |(2) 102    |
|------------|--------------|--------------|-----------|
Note: The parenthesis are the IDs

然而,当我在html上反映它时,它看起来像这样:

|--student--|--lecture--|--room--|
|  Leonardo |  Science  |   101  |
|  Leonardo |    Math   |   102  |
|-----------|-----------|--------|

我想要的是这样:

|--student--|--lecture--|--room--|
|    Goku   |  Physics  |        |
|  Leonardo |  Science  |   101  |
|  Leonardo |    Math   |   102  |
|-----------|-----------|--------|

我该如何解决?我正在使用此代码:

<table>
  <tr>
    <td>student</td>
    <td>lecture</td>
    <td>room</td>
  </tr>
  <?php while($class = mysqli_fetch_array($class_result)) { ?>
  <tr>
    <td><?=$class['student']?></td>
    <td><?=$class['lecture']?></td>
    <td><?=$class['room']?></td>
  </tr>
  <?php } ?>
</table>

1 个答案:

答案 0 :(得分:1)

您最好使用较新的JOIN语法,这允许现有(JOIN)行的各种组合(LEFT / RIGHT JOIN)。

$classes = "SELECT * FROM students
              JOIN classes ON students.student_id=classes.student_id
              JOIN lectures ON lectures.lecture_id=classes.lecture_id
              LEFT JOIN rooms ON rooms.room_id=classes.room_id";

阅读MySQL: Quick breakdown of the types of joins了解更多信息。