对于在另一个查询中嵌套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
现在虽然我很欣赏我的例子并不真的需要两张表,如果我能理解回答这个例子的正确方法,我相信我没有在我的解决方案中做过,那么我可以将理论应用于更复杂的的解决方案。
提前致谢。
答案 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"]";
}
}