Я разрабатываю игру, и я хочу, чтобы скрипт запускался каждую минуту (с помощью задания cron, я думаю).Получить и обновить столбец всех строк в таблице
Таким образом, сценарий, который я хочу запустить, принимает максимум HP символа (из столбца в таблице базы данных), вычисляет, чтобы получить 10% от этого значения, а затем добавить эти 10% к символам текущего hp (что другой столбец в таблице). Затем я хочу выполнить итерацию по всем строкам в таблице базы данных.
E.g. Рассмотрим следующую таблицу:
charname current_hp max_hp
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
player1 20 30
player2 15 64
player3 38 38
После того, как сценарий был запущен, и я хочу, чтобы таблица выглядит следующим образом:
charname current_hp max_hp
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
player1 23 30
player2 21 64
player3 38 38
Так, я знаю, что технически может осуществить это, например,
$characters = $db->getCharacterList();
foreach ($characters as $character) {
$maxHp = $character['max_hp'];
$curHp = $character['current_hp'];
$hpToAdd = $maxHp/10;
if (($curHp + $hpToAdd) >= $maxHp) {
$db->update('characters', $character['id'], array(
'current_hp' => $maxHp
));
} else {
$db->update('characters', $character['id'], array(
'current_hp' => ($curHp + $hpToAdd)
));
}
}
Только мой вопрос: Является ли решение размещенным над эффективным способом реализации этого? Будет ли это работать на столе с, скажем, 10 000 строк, или это займет слишком много времени?
Заранее спасибо.
Я думаю, что следующий оператор SQL выполняет вычисления для вас: 'update characters set current_hp = max (current_hp + max_hp/10);' –
Как проигрывались игроки с 15 до 19? 10% из 64 - 6,4, поэтому можно было бы представить, что 15 станет 21, или, может быть, даже 22. – eggyal
@eggyal Да, это было просто я неряшливый ... lol, спасибо. –