У меня имеется следующая таблица:
CREATE TABLE IF NOT EXISTS `farmers` (
`id` INT(11) AUTO_INCREMENT COMMENT 'ID записи',
`user_id` bigint NOT NULL COMMENT 'ID юзера',
...
`energy` INT(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'Энергия'
`apples_need` INT(11) UNSIGNED DEFAULT 1 COMMENT 'Сколько нужно яблок в день',
`apples` INT(11) UNSIGNED DEFAULT 0 COMMENT 'Яблок нафармлено за день',
...
PRIMARY KEY (`id`),
FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
Теперь, хочу реализовать скрипт, который будет выполняться раз в сутки, в 00:00 через Cron. Суть скрипта следующая и выполнение должно быть разделено на части.
Первая часть
farmers
, у которых apples
<= apples_need
;apples
.Вторая часть
farmers
, у которых apples
> apples_need
;apples = 5
), а ему в сутки нужно добыть 5 (apples_need
= 5), то вычислить остаток (лишнее кол-во) и конвертировать следующим образом:
Прибавить лишнее кол-во apples
к полю energy
;apples
.На словах всё выглядит громоздко, на самом деле, мне кажется, что можно сделать проще. Проблема в том, что не знаю, как правильно построить запросы такого типа, и так, чтобы это создавало как можно меньше загрузки. Поэтому, хотелось бы увидеть пример реализации сих слов. Скрипт будет работать на большое число юзеров.
Заранее спасибо.
Возможно, так:
update farmers
set energy = energy + case when apples > apples_need then apples - apples_need else 0 end,
apples = 0;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
На сервере (Windows 2012) стоит Apache + PHPПытаюсь подключится к Qiwi API по curl
Можно ли у разделов в кастомайзере сделать подразделы?