php - 如何从 MySQL 和 PHP 中的多个表中检索数据?
问题描述
TLDR:请为我的问题指出最简单的教程。我读过很多教程,但他们所做的只是让我更加困惑。
我有三张桌子。
- 学生(有一行id和name)
- 课程(有一行id和name)
- 课程_学生
链接两者的第三个表是这样创建的:
CREATE TABLE courses_students (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
student_id INT(6) REFERENCES students(id),
course_id INT(6) REFERENCES courses(id)
);
然后我添加一个简单的数据,如下所示:
INSERT INTO courses_students (course_id, student_id) VALUES (2, 3);
2 和 3 分别是课程表和学生表中的 id。如何使用 mysqli+PHP 语句检索这些 id 的信息(2 个来自课程表,3 个来自学生表) ?
解决方案
这很简单,有很多方法,这里是最简单的一种(假设你已经“建立”了这里描述的连接https://www.php.net/pdo.connections):
$stmt = $pdo->query("
SELECT s.id AS studentId, s.name AS studentName, c.id AS courseId, c.name AS courseName
FROM courses_students AS cs
LEFT JOIN students AS s ON s.id = cs.student_id
LEFT JOIN courses AS c ON c.id = cs.course_id
");
$records = $stmt->fetchAll();
当您需要使用参数进行查询时,这会变得有点复杂 - 那么您应该阅读更多关于绑定的内容,但总体思路类似于以下代码:
// Preparing the statement.
$stmt = $pdo->prepare("
SELECT s.id AS studentId, s.name AS studentName, c.id AS courseId, c.name AS courseName
FROM courses_students AS cs
LEFT JOIN students AS s ON s.id = cs.student_id
LEFT JOIN courses AS c ON c.id = cs.course_id
WHERE cs.student_id = :studentId
AND cs.course_id = :courseId
");
// Binding and executing the statement.
$stmt->execute([
'studentId' => 3,
'courseId' => 2
]);
$records = $stmt->fetchAll();
推荐阅读
- ms-access - 是否可以通过远程桌面服务使用 MS-Access 应用程序?
- php - 如何显示列表,在 laravel 中选择选项
- python - 如何从包含字典列表的字典中获取项目
- javascript - Vue应用程序中的静音更新无限循环
- javascript - 如何使用http请求根据规则访问firebase实时数据库
- reactjs - React 路由器正在堆叠路由
- python - 根据索引填写数据
- javascript - 如何将单个对象迭代到定义格式内的多个对象的新数组中
- python - 我使用 Kivy UrlReguest 下载并显示 Json 文件,但在 android 上没有任何效果,为什么?
- c# - 检测 C# 表单外的鼠标点击