php - 在 PHP 中嵌套 MySQLi 的正确方法
问题描述
我有一个关于在另一个查询中嵌套 MySQLi 查询的问题可能是相当基本的回答。我不确定这是否是最佳实践,如果有人可以通过让我知道下面的示例是否运行良好,或者是否有更好的方法来提供帮助,我将不胜感激。
表一:学生
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
现在,虽然我很欣赏我的示例实际上并不需要两张表,但如果我能理解回答这个示例的正确方法,我确信我在我的解决方案中没有这样做,那么我可以将该理论应用于更复杂的解决方案。
提前致谢。
解决方案
使用一个循环并加入表格。您的代码更快(注释 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"]";
}
}
推荐阅读
- .net - WebApi 调用,客户端还是服务器端?
- conditional-statements - MarkLogic: fn.empty fn.exsits !== null !== ""
- javascript - 如何将支持谷歌浏览器的网站添加到主屏幕?
- python - Python多处理内存过载
- python - 如何查看 python 库的源代码?
- sql - SQL Server:按组处理
- python - 按布尔系列过滤熊猫df
- react-native - useState 在开关 onValueChange 上落后一步
- java - (Java) 使用 Object wait() 和 notify() 的线程安全
- postgresql - 撤消查询的反向sql