填充连接表

时间:2013-10-22 12:57:27

标签: php mysql sql forms post

我正在制定一个调度系统,学生可以通过php和mysql与老师一起预订课程。

有3个单独的表来保存数据,每个表都有自己唯一的idID studentID,lessonID和teacherID。他们都是多对多关系。许多学生可以上很多课。许多老师可以上很多课。因此,有两个连接表将学生和教师连接到相同的课程,课程/学生和课程/教师。

我遇到的问题是我正在制作一个输入新课程的表格。我希望能够以相同的形式指派学生和老师。表单中的大多数数据都直接发布到课程表中,这很容易(开始时间,结束时间,房间号等),但我遇到了联结表的问题。

我正在提取可用学生和教师的列表,并打算根据他们的ID将它们输入到联结表中。我似乎无法弄清楚在实际创建之前我应该​​如何捕获课程ID,因为我需要连接表的lessonID,但是课程还没有创建。

所有ID自动递增。我能想到的唯一解决方案是返回最新的lessonID并递增1。这是最佳做法吗?我觉得这可能会在以后引起问题。例如,在两个用户尝试同时创建课程,或者有延迟而另一个课程在另一个课程之前创建但他们都将相同课程ID发布到联结表的情况下。

任何输入都表示赞赏!感谢

3 个答案:

答案 0 :(得分:1)

插入课程记录时,您可以检索分配的ID(因为您已自动增加它)。所以程序应该是首先插入课程,返回插入的ID。将此返回的课程ID与学生ID和教师ID一起使用,以插入联结记录。

// $db is the mysqli object that has been connected to your database

// Insert the lesson
if ($db->query("INSERT INTO .........."))
{
    $lessonID = $db->insert_id;

    // Insert the student and teacher junctions with $lessonID
}

答案 1 :(得分:0)

如你所说

For example in situations when two users try to create lessons at the same time

如果发生这种情况,它不会产生任何问题,所以不要担心

答案 2 :(得分:0)

您不必担心该课程不存在,因为您要以相同的形式发布所有内容。您只需在插入数据时控制逻辑。因此,您可以提交课程数据,教师列表和学生列表。在您的代码中,您必须首先插入课程(当然控制可能发生的任何错误),并使用课程的ID,您可以插入教师和学生。如前所述,在插入答案时,您可以插入id。