将数据插入从两个合并的 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 中的分数来推断学生在课程中的注册情况].