|
|
|
| Передо мной встала задача которую никак не могу решить....
прошу помощи :)
Итак. есть пользователь которому каждый час прибавляются очки (поинты, деньги, статы, как угдно)
Например каждый час пользователь получает по 36 очков, а в данный момент у него 100.
Пользователь зашел на сайт через 30 минут (после своего последнего захода) и увидел что очков у него 118. Как это реализовать?
Причем интервал хотелось бы не стандартный (30 минут), а чтобы высчитывалось даже если он айдет через 2 секунды. (но при этом прибыл не привышала бы установленную в час) | |
|
|
|
|
|
|
|
для: Равечка
(01.07.2007 в 03:47)
| | Что-то вроде этого
<?php
$points = 36; //Очков в час
$ts = time();
$interval = ceil(3600 / $points);
session_start();
$_SESSION["usr_points"] = isset($_SESSION["usr_points"]) ? $_SESSION["usr_points"] : 0;
$_SESSION["points_add"] = isset($_SESSION["points_add"]) ? $_SESSION["points_add"] : $ts;
if(time() - $_SESSION["points_add"] > $interval)
{
$_SESSION["usr_points"] += intval(($ts - $_SESSION["points_add"]) / $interval);
$_SESSION["points_add"] = $ts - (($ts - $_SESSION["points_add"]) % $interval);
}
echo("You have " . $_SESSION["usr_points"] . " points.");
?>
|
| |
|
|
|
|
|
|
|
для: Равечка
(01.07.2007 в 03:47)
| |
SELECT
username,
starttime,
startrate,
(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(starttime)) AS delta,
rate,
startrate+(UNIX_TIMESTAMP()-UNIX_TIMESTAMP(starttime))*rate/3600) AS score
FROM users
|
| |
|
|
|
|
|
|
|
для: Trianon
(01.07.2007 в 09:49)
| | Тогда я бы добавил FLOOR():
SELECT
`username`,
`starttime`,
`startrate`,
(UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`starttime`)) AS `delta`,
`rate`,
`startrate` + FLOOR((UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`starttime`)) * `rate` / 3600) AS `score`
FROM `users`;
|
Чтобы очки были целым числом. | |
|
|
|
|
|
|
|
для: Unkind
(01.07.2007 в 14:30)
| | Это уже вопрос отображения... На прикладном уровне информацию имеет смысл держать точной. По возможности. | |
|
|
|