PHP MySQL 根据 Column/Row 值选择多个表

PHP MySQL Selecting Multiple Tables Based on Column/Row Value

我只是根据我的 'students' table.[=22= 的值,对一些我试图关联起来的 table 进行一些测试]

这里是我拥有的总数 table:

students TABLE

id, 名字, course_num, msg_num


biology TABLE

id, 详情, msg_num

chemistry TABLE

id, 详情, msg_num

physics TABLE

id, 详情, msg_num


所以我首先尝试 select 'students' table,并基于 [=48] 中的 'course_num' 和 'msg_num' 值=] table,它将确定我拥有的 table 数组中的哪个 table 被 select 编辑(如上所示,'biology', 'chemistry', & 'physics' tables).

'students' table 看起来像这样:

'biology' table 有这样的数据:

'chemistry' table 看起来像这样:

'physics' table 看起来像这样:

所以,再一次,如果 'students' table 中的 'course_num' 中的数字设置为 '0,1,2 ' ,然后它会从我预先设置的数组列表中动态 select 相关的 table 。这是我在下面尝试过的确切代码,但它没有正确同步。请让我知道我在这里做错了什么:

<div style="position:relative; margin:auto; width:400px; font-family:Poppins; font-size:16px; border:2px solid black; padding:10px; margin-top:100px;">


<?php

include 'db_connect.php';


$selected_courses = array("biology", "chemistry", "physics");



$sql1 = "SELECT * FROM students";
$result1 = $conn->query($sql1);

while($row1 = $result1->fetch_assoc()){
    $course = $selected_courses[$row1['course_num']];

    $sql2 = "SELECT students.*, $course.*, FROM students, $course
    WHERE students.msg_num = $course.msg_num";

    $result2 = $conn->query($sql2);
    $row2 = $result2->fetch_assoc();

    echo "STUDENT NAME: ". $row2['name'] . "<br>";
    echo "DETAILS: ". $row2['details'] . "<br>";
    echo "MSG NUM: ". $row2['msg_num'] . "<br>";
    echo "<br>";
}


$conn->close();

?>

</div>

您的架构基本上是错误的,并且您的代码包含嵌套查询,这几乎总是错误的做事方式。

设置一个 table 并添加一个 course_num 列,而不是三个具有不同课程数据的相同 table。这允许您 JOIN 您的学生直接到他们的详细信息行,并且您可以使用单个 SELECTJOIN 来提取数据。

所以使用你的学生 table 和这门课程的详细信息 table:

CREATE TABLE `courseDetails` (
  `id` int NOT NULL AUTO_INCREMENT,
  `msg_num` int NOT NULL,
  `course_num` int NOT NULL,
  `details` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4;

您可以像这样在两个 table 之间的公共列上加入:

select name, details, s.msg_num 
  from students s 
  join courseDetails d 
    on (s.course_num = d.course_num AND s.msg_num = d.msg_num);

要在单个查询中获得此输出:

name details msg_num
Adam Smith Biology Details #0 0
John Wright Chemistry Details #1 1

您可以根据需要改变 JOIN 条件并使用 WHERE 子句创建不同的输出,所有这些都来自两个基本 table。

这将您的 PHP 代码简化为


include 'db_connect.php';

$sql1 = "select name, details, s.msg_num from students s join courseDetails d on (s.course_num = d.course_num AND s.msg_num = d.msg_num);";

$result1 = $conn->query($sql1);

while($row1 = $result1->fetch_assoc()){
    echo "STUDENT NAME: ". $row1['name'] . "<br>";
    echo "DETAILS: ". $row1['details'] . "<br>";
    echo "MSG NUM: ". $row1['msg_num'] . "<br>";
    echo "<br>";
}

$conn->close();

?>

演示:https://www.db-fiddle.com/f/3cmTkGhEgiBEUZS7dFNvnz/0