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
您的学生直接到他们的详细信息行,并且您可以使用单个 SELECT
和 JOIN
来提取数据。
所以使用你的学生 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();
?>
我只是根据我的 '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
您的学生直接到他们的详细信息行,并且您可以使用单个 SELECT
和 JOIN
来提取数据。
所以使用你的学生 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();
?>