Хорошо, у меня есть таблица с полем подсчета от 0 до 100. До шести из этих полей связаны с одним идентификатором. Мне нужно запустить обновление, которое уменьшит каждую из этих строк на другое случайное число от 1 до 3.
Я знаю, что могу получить мое случайное значение с помощью:
CAST(RAND() * 3 AS UNSIGNED)
И я знаю, что могу заставить работать мое обновление:
UPDATE Info SET Info.count = CASE WHEN Info.count < 2 THEN 0 ELSE Info.count - 2 END WHERE Info.id = $iid AND Info.type = 'Active';
(Это просто гарантирует, что я никогда не опустюсь ниже 0)
Но я не могу объединить их по той очевидной причине, что мое случайное число будет отличаться при оценке от установленного ...
UPDATE Info SET Info.count = CASE WHEN Info.count < CAST(RAND() * 3 AS UNSIGNED) THEN 0 ELSE Info.count - CAST(RAND() * 3 AS UNSIGNED) END WHERE Info.id = $iid AND Info.type = 'Active';
Теперь я не хочу сохранять только одну переменную, потому что мне может понадобиться до 6 разных чисел ... Есть ли способ сделать то, что я хочу сделать в одном запросе? Я знаю, как я могу сделать это несколькими, но мне действительно не нужно запускать до 6 запросов каждый раз, когда мне нужно обновить один из этих блоков ...
Структура таблицы, над которой я работаю:
CREATE TABLE `Info` (
`id` int(40) DEFAULT NULL,
`count` int(11) DEFAULT NULL,
`type` varchar(40) DEFAULT NULL,
`AUTOINC` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`AUTOINC`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
Поле AUTOINC на данный момент просто для того, чтобы я мог легко проверить, что происходит во время тестирования.
Спасибо!