Мне было поручено сделать статистику «зрителем» для одного из игровых режимов нашего сервера. Все шло отлично, но единственная проблема, которую я имею, — это преобразование проигранного времени в часы: минуты: секунды.
Разработчик, который сделал настоящий игровой режим, хранит время, проведенное в MySQL, в миллисекундах. К сожалению, у многих игроков есть достаточно времени, чтобы легко вызвать целочисленное переполнение (при расчете в PHP).
Теперь мне интересно, какой самый простой и эффективный способ решить эту проблему. Есть ли способ сделать это в запросе MySQL, о котором я не знаю?
Допустим, у вас есть 36001316000 миллисекунд:
SET @miliseconds = 36001316000;
SET @s = @miliseconds / 1000;
SET @hours = FLOOR(@s / 3600);
SET @minutes = FLOOR(@s / 60 - @hours * 60);
SET @seconds = ROUND(@s - @hours * 3600 - @minutes * 60);
SELECT @hours, @minutes, @seconds;
это вернет 10000 часов, 21 минуту & 56 секунд
Как вы будете хранить эту информацию, зависит от того, как вы будете ее использовать. Если это только для информационных целей или для вычислений на основе PHP, вы можете сохранить его в varchar, если вам нужно выполнить вычисления в MySQL на его основе, вы можете сохранить его в 3 различных целочисленных полях.
Что такое тип столбца? Integer?
Изменение целого числа на Беззнаковое целое удвоит максимальное число.
Легкий выход:
Изменить структуру таблицы для этого столбца с INT
в BIGINT
,
Если уже BIGINT, разделите существующие записи на 1000 и используйте секунды.
Пример:
Или разделите существующие записи на 60000 и используйте минуты.
$ sql = «ОБНОВЛЕНИЕ users
ЗАДАВАТЬ time
знак равно time
/ 60000 «;