gpt4 book ai didi

php - 将数据插入到从两个合并表中检索的表中

转载 作者:行者123 更新时间:2023-11-29 12:13:20 25 4
gpt4 key购买 nike

我有两门类(class)。每门类(class)都有多项作业。学生可以学习这两门类(class)。
我有以下表格:courses,student_courses,course1我的类(class)表有 st_index,assignmnet_no,marks,course_no 作为字段
student_courses 表包含 st_index,course1,course2 ,如果学生遵循 course1 或 course2 ,则插入 1。
course1具有Student_Index、Assignment1、Assignment2、Assignment3作为字段。

我已将数据插入表courses,student_courses。通过从这些数据中检索数据,我想得到 course1 表。course1应如下所示:
enter image description here

这是我的代码:

if($_SESSION['user']['course']=="Course1"){
$result=mysql_query("SELECT student_index FROM student_courses WHERE course1=1");
while($index=mysql_fetch_array($result)){
echo $index[0];
echo"<br>";
$result2=mysql_query("SELECT * FROM courses WHERE course_no='Course1' AND st_index='$index[0]'");
while($i2=mysql_fetch_array($result2)){
$ass_no=$i2['assignment_no'];
if($ass_no=='1'){
echo $index[0];
$result3=mysql_query("INSERT INTO course1(Student_Index,Assignment1) VALUES('$index[0]','$i2[marks]')");
}
if($ass_no=='2'){
echo $index[0];
$result4=mysql_query("INSERT INTO course1(Assignment2) VALUES('$i2[marks]')");
}
if($ass_no=='3'){

$result5=mysql_query("INSERT INTO course1(Assignment3) VALUES('$i2[marks]')");
}

}


}

}

?>

问题是对于 course1,仅插入第一个 Student_index 分配值。对于相同的 Student_index,值也被插入到两个单独的行中。我想做的是,当我们考虑 course1 中的一行(由 Student_index 标识)时,该行应该包含该学生的所有作业分数。我怎样才能实现这个目标?

也就是说,我有两条记录与表 course1 的条件相匹配,即 945,568。
course1 中,它仅获取 965 的插入记录,也如下所示。 enter image description here 。两行应该是一行,在相同的index_no下

为了检查第一个 while 循环内部出了什么问题,我使用了 echo $index[0] 。它同时打印 945,568。但在另一个 while 循环内的 if 语句中,仅打印 945。那是当循环第二次运行时,我认为行 $result2=mysql_query("SELECT * FROM course WHERE course_no='Course1' AND st_index='$index[0]'"); 没有被执行。

最佳答案

问题是在 SQL 中,INSERT 总是添加新行。您已为每个标记插入一行,但只为其中一个标记提供了 Student_Index(因此后续行上的索引为空)。您想要的是UPDATE命令。

因此,让我们在内部 WHILE 之前使用一次 INSERT 为每个学生创建一行:

INSERT INTO course1(Student_Index) VALUES('$index[0]')

然后通过将 INSERT 语句替换为(例如,对于作业 1)来填充字段:

UPDATE course1 SET assignment1 = '$i2[marks]' WHERE Student_Index = '$index[0]'

或者,您可以通过以下方式单独使用 SQL 来完成此操作:

CREATE TABLE course1
SELECT s1.st_index,
a1.marks AS Assignment1,
a2.marks AS Assignment2,
a3.marks AS Assignment3
FROM courses a1, courses a2, course a3
WHERE a1.course_no = 1
AND a2.course_no = 1
AND a3.course_no = 1
AND a1.assignment_no = 1
AND a2.assignment_no = 2
AND a3.assignment_no = 3
AND a1.st_index = a2.st_index
AND a1.st_index = a3.st_index;

我们已将类(class)表连接三次,以在 course_no=1 的情况下选择三个标记所在的三行,并将它们限制为所有三行中的同一学生。这将为每个学生返回一行。此外,使用此解决方案根本不需要引用 Student_courses 表,因为您可以通过类(class)表中的分数来推断学生的类(class)注册情况。

关于php - 将数据插入到从两个合并表中检索的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com