2012-02-27 95 views
3

給定兩個表:更新如果重複插入?在INSERT上自動增量PK?

`Students` 
id   int, primary, auto-increment 
sid  int 
fname  varchar 
lname  varchar 


`Registration` 
id   int, primary, auto-increment 
student_sid int 
coursenum int 

有沒有辦法來填充Students與每次登記的類的coursenum新列?因此,每次爲給定sid添加第二個coursenum時,students.id會自動遞增,並保留爲主鍵,而帶有sid,fname,lname和new coursenum的新行將添加到表中。

它有點像INSERT ... IF DUPLICATE UPDATE的倒退版本。我想更新...如果重複插入。

+1

這似乎是一件很奇怪的事情想要做。可能想重新考慮你的數據庫設計。我希望你在Students表中只有一個ID字段(稱爲studentID),每個學生一個記錄。註冊表可以有自己的ID字段,但似乎沒有必要。它應該有一個studentID字段和coursenum字段。每個學生每門課一次入學,所以如果三名學生每次上四門課,學生表中將有三個條目,註冊表中有12個條目。 – Travesty3 2012-02-27 19:41:59

+0

此外,您可能想使用courseID而不是coursenum,並有另一個關係表,其中包含有關每門課程(名稱,編號,教授,學分等)的信息。 – Travesty3 2012-02-27 19:43:46

+0

同意!我無法控制數據庫設計,也無法控制這些表中需要這些字段的應用程序。我只是試圖找到一種方法來用查詢來填充數據,而不是用手來填充。 – Beatrice 2012-02-27 19:44:09

回答

1

也許你可以做這樣的事情(見下面的註釋):

$result = mysql_query("SELECT DISTINCT student_sid from Registration"); 
while (list($studentID) = mysql_fetch_row($result)) 
{ 
    $result2 = mysql_query("SELECT fname, lname FROM Students WHERE sid = '{$studentID}'"); 
    list($fname, $lname) = mysql_fetch_row($result2); 

    mysql_query("DELETE FROM Students WHERE sid = '{$studentID}'"); 
    mysql_query("INSERT INTO Students (sid, fname, lname, coursenum) SELECT '{$studentID}', '{$fname}', '{$lname}', coursenum FROM Registration WHERE student_sid = '{$studentID}'"); 
} 

一些注意這裏:

  1. 這段代碼沒有進行測試,但我想應該沒有錯誤工作。
  2. 這不會保留Students表中的原始id列。它會得到名字和姓氏,然後刪除學生,併爲Registration表中的每個條目插入一個新行。它將保留sid,fnamelname,並將填充新列coursenum
  3. 這也假定您已經將Students表更改爲包括coursenum列。
  4. 根據你在這裏討論的學生和課程的數量,這個代碼可能不是世界上最快的,但我認爲這不是定期完成的事情......更多一次性遷移這種事情。

希望這可以幫助你。

+0

我認爲這是一個很好的解決方案。謝謝。 – Beatrice 2012-02-27 22:12:08