2012-02-08 2 views
0

Я пытался загрузить файл csv для обновления таблицы в моем db, но также хотел предотвратить дублирование. Первоначально работал один DUPLICATE, но когда я добавил второе условие, он не сработал. У меня есть «Дублирующая запись« 1 »для ключевого PRIMARY». Как я могу достичь своей цели.Ошибка записи двоичного ключа DUPLICATE KEY UPDATE

благодарит за вашу помощь.

$sql = "INSERT INTO biodata (student_number, fname, lname, course_name, level) 
     VALUES('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]') 
     DUPLICATE KEY UPDATE student_number = student_number 
     AND course_name = course_name"; 

mysql_query($sql) or die (mysql_error()); 
+0

Что представляют собой «ПЕРВЫЕ КЛЮЧИ» и «УНИКАЛЬНЫЕ КЛЮЧИ» в таблице? –

+0

только student_number является ПЕРВИЧНЫМ КЛЮЧОМ –

+0

Итак, каждый студент может пройти всего один курс, не так ли? –

ответ

2

Заменить AND с запятой , в UPDATE части.

Используйте синтаксис VALUES() для обозначения переданных значений.

Кроме того, вам не нужно обновить первичный или уникальный ключ (который активизировал ON DUPLICATE KEY UPDATE):

$sql = " 
    INSERT into biodata 
    (student_number, fname, lname, course_name, level) 
    VALUES 
    ('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]') 
    ON DUPLICATE KEY UPDATE 
         --- student_number = VALUES(student_number), 
         --- removed 
     fname = VALUES(fname), 
     lname = VALUES(lname), 
     course_name = VALUES(course_name), 
     level = VALUES(level) 
" ; 

Вышеприведенный код делает:

Если INSERT не удается (уже есть студент с этим student_number, который вы пытаетесь вставить), активируется UPDATE и обновляются 4 других поля.

Это ваш выбор, какие поля обновлять. Если вы хотите обновить, например, только поле course_name, просто сохраните эту строку и удалите остальные.

+0

Именно то, что я хотел. Спасибо. –

+0

Почему вы отредактировали код, первый код работал хорошо для меня. Есть ли причина для этого? Пожалуйста, объясни. Спасибо. –

1

Я думаю, вы неправильно поняли смысл НА ОБНОВЛЕНИИ КЛЮЧА DUPLICATE . IT не определяет условие, когда происходит дублирующий ключ, но решение, если такое событие произошло. Таким образом, вы можете каким-то образом изменить ключ, что не приведет к дублированию. Условия для дубликатов определяются с помощью индексов и (первичных) ключей в определении таблицы. Таким образом, согласно вашему коду выше, вы должны добавить в определение таблицы уникальный ключ по имени_имя и имя_курса.

Для получения дополнительной информации см. docu.

+0

У меня есть только номер студента как ключ PRIMARY. –

Смежные вопросы