3

给定两个表:

`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 和新 coursenum 的新行添加到表中。

这有点像 INSERT...IF DUPLICATE UPDATE 的向后版本。我想要更新...如果重复插入。

4

1 回答 1

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. 这不会保留表中的原始idStudents。它将获取名字和姓氏,然后删除学生,并为表中的每个条目插入一个新行Registration。它将保留sid,fnamelname, 并将填充一个新列coursenum
  3. 这还假设您已经更改了Students表格以包含一coursenum列。
  4. 根据您在这里谈论的学生和课程的数量,此代码可能不是世界上最快的,但我假设这不是定期完成的事情......更多的是一次性迁移之类的。

希望这对您有所帮助。

于 2012-02-27T20:57:29.957 回答