3

与えられた2つのテーブル:

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


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

Students登録した各クラスのコース番号を新しい列に入力する方法はありますか?したがって、特定のsidに2番目のcoursenumが追加されるたびに、students.idは自動インクリメントされ、主キーのままになりますが、sid、fname、lname、および新しいcoursenumを含む新しい行がテーブルに追加されます。

これは、INSERT ... IFDUPLICATEUPDATEの逆バージョンのようなものです。UPDATE ... IFDUPLICATEINSERTが必要です。

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. これにより、テーブルの元のid列は保持されません。Students姓名を取得し、生徒を削除して、Registrationテーブルの各エントリに新しい行を挿入します。sidfname、およびを保持しlname、新しい列に入力しますcoursenum
  3. Studentsこれは、列を含めるようにテーブルを既に変更していることも前提としていcoursenumます。
  4. ここで話している学生とコースの数によっては、このコードは世界最速ではないかもしれませんが、これは定期的に行われるものではないと思います...もっと一度だけ移行のようなもの。

うまくいけば、これはあなたを助けます。

于 2012-02-27T20:57:29.957 に答える