Обновление строки SQL, если записи совпадают
В MySQL у меня есть tblProjects, как это -
Project_ID Field_ID Record_ID Метка 556895 1 1 Офисный стол 1 556895 1 2 Офисный стол 2 556895 2 1 Это письменный стол 1 556895 2 2 Это письменный стол 2 472246 1 1 Привет 1 472246 1 2 Привет 2 472246 2 1 Это деревянный стол 1 472246 2 2 Это деревянный стол 2
Я использую SQL-запрос (написанный на PHP), который будет вставлять значение как это -
$sql_query = "INSERT INTO Items (Project_ID, Field_ID, Record_ID, Label) VALUES ('232323', '3', '3', 'New Label')";
Работает правильно. Но мне нужно обновить "Метку", если все три "Project_ID", "Field_ID" и "Record_ID" одинаковы - и "Вставить" как новую запись, если какая-либо другая.
Как видно из структуры записи, Unique/Primary здесь не вариант.
2 ответа
Решение
Ты можешь использовать INSERT...ON DUPLICATE KEY UPDATE
, Но прежде чем функция будет работать должным образом, вам нужно ввести уникальный ключ в таблицу.
В этом случае вам нужно иметь UNIQUE
ключ на три колонки,
ALTER TABLE Items ADD CONSTRAINT Items_uq
UNIQUE (Project_ID, Field_ID, Record_ID)
и есть это утверждение,
INSERT INTO Items (Project_ID, Field_ID, Record_ID, Label)
VALUES ('232323', '3', '3', 'New Label')
ON DUPLICATE KEY UPDATE
Label = 'New label'
Почему уникальный не вариант? Просто создайте его для этих трех полей вместе.
Тогда вы можете использовать ON DUPLICATE KEY UPDATE
синтаксис.