ОБНОВЛЕНИЕ, ЕСЛИ ДУБЛИРОВАТЬ ВСТАВИТЬ? w автоинкремент ПК на INSERT? - PullRequest
3 голосов
/ 27 февраля 2012

Имеются две таблицы:

`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 добавлялся второй курс, студенчество автоматически увеличивало его, оставаясь первичным ключом, а в таблицу добавлялась новая строка с sid, fname, lname и новым курсом.

Это похоже на обратную версию INSERT ... ЕСЛИ ДУБЛИРОВАТЬ ОБНОВЛЕНИЕ.Я хочу ОБНОВИТЬ ... ЕСЛИ ДУБЛИРОВАТЬ ВСТАВИТЬ.

1 Ответ

1 голос
/ 28 февраля 2012

Возможно, вы можете сделать что-то вроде этого (см. Примечания ниже):

    $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.Он сохранит sid, fname и lname и заполнит новый столбец coursenum.
  3. Это также предполагает, что вы уже изменили таблицу Students для включения coursenum column.
  4. В зависимости от того, сколько студентов и курсов вы здесь говорите, этот код может быть не самым быстрым в мире, но я предполагаю, что это не то, что будет сделанорегулярно ... больше разовых миграций.

Надеюсь, это поможет вам.

...