用PHP嵌套MySQLi的正确方法

时间:2018-05-08 18:20:09

标签: php mysql database mysqli

对于在另一个查询中嵌套MySQLi查询,我有一个问题可能是相当基本的。我不确定这是否是最佳做法,并且如果有人可以通过让我知道下面的示例是否运作良好,或者是否有更好的方法可以帮助我会感激。

表1:学生

id | linked_teacher | student_name | student_age
1  | 1              | Bob Eaves    | 15 
2  | 1              | Ellen Robs   | 11
3  | 2              | Will Tops    | 7
4  | 3              | Scott Long   | 13

表2:教师

id | teacher_name
1  | Mrs Green
2  | Mr Wood
3  | Dr Grey
4  | Professor Long

我的PHP如下所示,目前:

$sql = "SELECT linked_teacher, student_name, student_age FROM students";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
  while($row = $result->fetch_assoc()) {
    $linked_teacher = $row["linked_teacher"];

    $sql2 = "SELECT teacher_name FROM teachers WHERE teacher_name = $linked_teacher";
    $result2 = $conn->query($sql2);
    if ($result2->num_row > 0) {
      while($row2 = $result2->fetch_assoc()) {
        $teacher_name = $row2["teacher_name"];
      }
    }

    echo "$row["teacher_name"]. " - ". $row["student_name"]. " - " . $row["student_age"]";
  }
}

这将输出以下内容:

Mrs Green - Bob Eaves - 15
Mrs Green - Ellen Robs - 11
Mr Wood - Will Tops - 7
Dr Grey - Scott Long - 13

现在虽然我很欣赏我的例子并不真的需要两张表,如果我能理解回答这个例子的正确方法,我相信我没有在我的解决方案中做过,那么我可以将理论应用于更复杂的的解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用一个循环并连接表。您的代码更快(注释3)并且更简单。正如上面第二条评论所指出的那样,一定要跟进并学习如何处理受污染的数据。祝你好运!

 $sql = "SELECT teacher_name, student_name, student_age FROM students JOIN teachers ON linked_teacher = teachers.id";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "$row["teacher_name"]. " - ". $row["student_name"]. " - " . $row["student_age"]";
  }
}