Обновление строки 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 синтаксис.

Другие вопросы по тегам