Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MySQL和PHP中从多个表中检索数据?_Php_Mysql - Fatal编程技术网

如何在MySQL和PHP中从多个表中检索数据?

如何在MySQL和PHP中从多个表中检索数据?,php,mysql,Php,Mysql,TLDR:请为我的问题提供最简单的教程。我读过很多教程,但它们所做的只是让我更加困惑。 我有三张桌子 学生(有一行id和姓名) 课程(有一行id和名称) 课程与学生 链接两者的第三个表是这样创建的: CREATE TABLE courses_students ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, student_id INT(6) REFERENCES students(id), course_id INT(6) RE

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

我有三张桌子

  • 学生(有一行id和姓名)
  • 课程(有一行id和名称)
  • 课程与学生
  • 链接两者的第三个表是这样创建的:

    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);
    
    然后我添加一个简单的数据,如下所示:

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

    这很简单,有很多种方法,下面是最简单的一种(假设您已经“建立”了此处所述的连接):

    当您需要使用参数进行查询时,这会变得有点复杂-然后您应该阅读更多关于绑定的内容,但总体思路类似于以下代码:

    // 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();
    

    看见请注意,INT声明后面的括号中的数字几乎没有意义,可能最好省略。“请为我的问题指出最简单的教程”-请阅读:-“要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源是堆栈溢出的主题”这让AS有点混乱,但当我删除AS并将表名更改为完整名称后,我就能够弄清楚了!谢谢当然,我给出别名的原因(使用AS)允许我编写您想要的查询的速记版本,但只要它对您有效,那就太好了!