Я пытаюсь написать 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);
Вы можете сравнить hash
с VALUES(hash)
прежде чем он будет обновлен, и использовать это при настройке is_patch_file
.
ON DUPLICATE KEY UPDATE
is_patch_file = hash != VALUES(hash),
hash = VALUES(hash),
updated_at = VALUES(updated_at)