Как я могу вставить или обновить, если значение отличается?

0

Я пытаюсь написать SQL-запрос, который установит значение 1, когда он обновит другой столбец.

В частности, я хочу установить мой is_patch_file в 1, если соответствующий столбец хеша изменяется. Если хеш-столбец НЕ изменен, он должен сохранить все существующее значение is_patch_file.

Это возможно?

Структура таблицы

DROP TABLE IF EXISTS 'program_files';
CREATE TABLE 'program_files' (
  'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
  'folder_id' int(10) unsigned NOT NULL,
  'name' varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  'path' varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  'hash' varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  'enabled' tinyint(1) NOT NULL DEFAULT '1',
  'created_at' timestamp NULL DEFAULT NULL,
  'updated_at' timestamp NULL DEFAULT NULL,
  'is_patch_file' tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY ('id'),
  UNIQUE KEY 'unique_file' ('folder_id','name','path','hash')
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Запросы SQL

INSERT INTO program_files (folder_id, name, path, hash, is_patch_file, enabled, created_at, updated_at) VALUES (3, 'TestName', 'TestPath', 'TestHash', 0, 1, NOW(), NOW()) ON DUPLICATE KEY UPDATE 
is_patch_file=1, #Is Patch file should ONLY be 1 if the hash is different from the original hash...otherwise keep our current value how do I do this?
hash=VALUES(hash),
updated_at=VALUES(updated_at);

INSERT INTO program_files (folder_id, name, path, hash, is_patch_file, enabled, created_at, updated_at) VALUES (3, 'TestName', 'TestPath', 'TestHash2', 0, 1, NOW(), NOW()) ON DUPLICATE KEY UPDATE 
is_patch_file=1, #Is Patch file should ONLY be 1 if the hash is different from the original hash...otherwise keep our current value how do I do this?
hash=VALUES(hash),
updated_at=VALUES(updated_at);
Теги:

1 ответ

0

Вы можете сравнить hash с VALUES(hash) прежде чем он будет обновлен, и использовать это при настройке is_patch_file.

ON DUPLICATE KEY UPDATE 
    is_patch_file = hash != VALUES(hash), 
    hash = VALUES(hash), 
    updated_at = VALUES(updated_at)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню