首页 > 解决方案 > 如何从 MySQL 和 PHP 中的多个表中检索数据?

问题描述

TLDR:请为我的问题指出最简单的教程。我读过很多教程,但他们所做的只是让我更加困惑。

我有三张桌子。

  1. 学生(有一行id和name)
  2. 课程(有一行id和name)
  3. 课程_学生

链接两者的第三个表是这样创建的:

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 个来自学生表) ?

标签: phpmysql

解决方案


这很简单,有很多方法,这里是最简单的一种(假设你已经“建立”了这里描述的连接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();

推荐阅读