0

你好在 PHP 脚本中我有以下 MySQL 查询

$query_players = "SELECT (current_timestamp -`Online_since`) AS `Since` FROM `streams` WHERE `Team` = $temp AND `Online` = 1 ORDER BY `Viewers` DESC";

然后我有:

$since = round($obj_players->Since /3600);

正如您可能想象的那样,$since 应该包含玩家在线的时间(以小时为单位)。奇怪的是它有错误的结果。就像 MySQL 中的时间过得更快:P 例如,大约 15 分钟后,它已经显示“自 1 小时以来在线”,大约 30 分钟后,它已经显示 2 小时,依此类推。

有谁知道可能出了什么问题?也许 current_timestamps 是问题所在?

4

2 回答 2

2

current_timestamp并不是真正以秒为单位来衡量的。因此,将差值除以 3600 不会产生小时数,而是一些任意值。

18 分钟后的差别1800当然round(1800/3600) = round(0.5)1

根据您的实际列类型,使用timediff()timestampdiff()进行计算。

于 2012-12-25T20:32:54.897 回答
1

尝试使用 TIMESTAMPDIFF:

$query_players = "SELECT TIMESTAMPDIFF(HOUR, NOW(), `Online_since`) AS `Since` 
                  FROM   `streams` 
                  WHERE  `Team` = $temp 
                  AND    `Online` = 1 
                  ORDER BY `Viewers` DESC";
于 2012-12-25T20:26:03.977 回答