2013-10-22 126 views
0

我正在調度系統上工作的學生將能夠與教師在PHP和MySQL預訂課程。填充連接表

有3個單獨的表來保存數據,每個表都有自己獨特的ID studentID,lessonID和teacherID。他們都是多對多的關係。許多學生可以有很多課程。許多教師可以有很多經驗教訓。因此,有兩個聯結表將學生和教師連接到相同的課程,課程/學生和課程/教師。

我遇到的問題是我正在製作一個輸入新課程的表單。我希望能夠以相同的形式分配學生和教師。表格中的大部分數據直接發佈到課程表中,這很容易(開始時間,結束時間,房間號碼等),但我遇到了聯結表的問題。

我拉出可用學生和教師的列表,並打算根據他們的ID將他們輸入到聯結表中。我似乎無法弄清楚在實際創建之前如何捕捉課程ID,因爲我需要結合表的lessonID,但課程還沒有創建。

所有ID自動遞增。我能想到的唯一解決方案是返回最新的lessonID並加1。這是最佳做法嗎?我感覺這可能會在稍後導致問題。例如,在兩個用戶同時嘗試創建課程的情況下,或者存在延遲並且另一個課程在另一個課程之前創建的情況下,但他們都將相同的課程ID發佈到聯結表。

任何輸入讚賞!謝謝

回答

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 
} 
+0

對不起,我的php不是那麼好......我得到的邏輯,我能夠檢索lessonID提供我有第一個插入的教訓,但我不知道我是如何檢索數字從數據庫中分配給$ lessonID。 我不太明白「 - >」。什麼是insert_id? – Guy

+0

當您執行查詢時,您的課程記錄將插入一個自動遞增的ID。這個生成的ID將被放入'insert_id'中。您可以在PHP中使用' - >'運算符來訪問類的實例中的成員/字段/變量。在這種情況下'$ db'是類「mysqli」的一個實例。通過執行'$ lessonID = $ db-> insert_id;'您將檢索插入到數據庫中的最後一條記錄的ID,在您的案例中,這將是您可以用來更新聯結表的課程的ID。 – Jonathon

+0

我明白了。所有這些都是在PHP中預定義的?我不必設置或分配insert_id? – Guy

0

如你所說

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

如果發生這種情況不會造成任何問題,所以不必擔心它

0

你不必擔心教訓不存在的你用同一個表單發佈所有內容。插入數據時只需控制邏輯。因此,您可以提交課程數據和教師名單以及學生名單。在你的代碼中,你必須先插入課程(當然可以控制任何可能發生的錯誤),並且可以插入教師ID和學生的ID。如前所述,在答案中,當您插入時,您可以擁有插入的ID。