将数据插入从两个合并的 Table 中检索到的 Table
Inserting Data to a Table Retrieved from Two Merged Tables
我有两门课程。每门课程都有几个作业。一个学生可以同时学习这两个课程。
我有以下 tables:courses,student_courses,course1
我的 courses table 有 st_index,assignmnet_no,marks,course_no 作为字段
和 student_courses table 有 st_index,course1,course2 如果学生学习 course1 或 course2,则插入 1。
Table course1 有 Student_Index、Assignment1、Assignment2、Assignment3 作为字段。
我已将我的数据插入 tables courses,student_courses
。通过从这些中检索数据,我想得出 course1
table.course1
应如下所示:
这是我的代码:
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 标识,该行应该具有该学生的所有作业标记。我怎样才能做到这一点?
也就是说我有两条符合条件的记录 table course1
为945,568.
在 course1
中,它只获取 965 的插入记录,它也如下所示。 。两行应该是一行,在同一个index_no
下
为了首先检查 while 循环内部出了什么问题,我使用了 echo $index[0]
。它同时打印 945,568。但是在另一个 while 循环中的 if 语句中,只打印了 945。那是当循环第二次为 运行 时,我认为 $result2=mysql_query("SELECT * FROM courses WHERE course_no='Course1' AND st_index='$index[0]'");
行没有被执行。
问题是在 SQL 中,INSERT 总是添加一个新行。您为每个标记插入了一行,但只为其中一个标记提供了 Student_Index (因此后续行上的索引为空)。您想要的是UPDATE命令。
所以让我们只使用一次 INSERT 为每个学生创建一行,就在内部 WHILE 之前:
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;
我们已经加入课程 table 三次,以 select 出三个标记所在的三行 course_no=1 并将它们限制为同一名学生在所有三行中。这将为每个学生 return 一行。此外,使用此解决方案根本不需要 student_courses table 的引用,因为您可以通过课程 table 中的分数来推断学生在课程中的注册情况].
我有两门课程。每门课程都有几个作业。一个学生可以同时学习这两个课程。
我有以下 tables:courses,student_courses,course1
我的 courses table 有 st_index,assignmnet_no,marks,course_no 作为字段
和 student_courses table 有 st_index,course1,course2 如果学生学习 course1 或 course2,则插入 1。
Table course1 有 Student_Index、Assignment1、Assignment2、Assignment3 作为字段。
我已将我的数据插入 tables courses,student_courses
。通过从这些中检索数据,我想得出 course1
table.course1
应如下所示:
这是我的代码:
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 标识,该行应该具有该学生的所有作业标记。我怎样才能做到这一点?
也就是说我有两条符合条件的记录 table course1
为945,568.
在 course1
中,它只获取 965 的插入记录,它也如下所示。
为了首先检查 while 循环内部出了什么问题,我使用了 echo $index[0]
。它同时打印 945,568。但是在另一个 while 循环中的 if 语句中,只打印了 945。那是当循环第二次为 运行 时,我认为 $result2=mysql_query("SELECT * FROM courses WHERE course_no='Course1' AND st_index='$index[0]'");
行没有被执行。
问题是在 SQL 中,INSERT 总是添加一个新行。您为每个标记插入了一行,但只为其中一个标记提供了 Student_Index (因此后续行上的索引为空)。您想要的是UPDATE命令。
所以让我们只使用一次 INSERT 为每个学生创建一行,就在内部 WHILE 之前:
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;
我们已经加入课程 table 三次,以 select 出三个标记所在的三行 course_no=1 并将它们限制为同一名学生在所有三行中。这将为每个学生 return 一行。此外,使用此解决方案根本不需要 student_courses table 的引用,因为您可以通过课程 table 中的分数来推断学生在课程中的注册情况].