我正在尝试跟踪某人登录系统所花费的时间。我需要能够组总秒数花在登录到小时。一个用户可能有一个登录和注销的事件,将跨越多个小时,但我需要确保正确的秒数记录对正确的小时。例如,如果用户在17:55登录并在18:10注销,则用户在17:00小时内将有300秒,在18:00小时内将有600秒我已经搜索了所有的地方,但找不到一个不涉及繁琐的while循环的解决方案,我正在处理一个大型数据集,所以它必须是高效的。如果任何人以前遇到过这个问题或有任何想法,将不胜感激。
np8igboo1#
因此,另一种高性能的方法是使用原始SQL。我假设你正在使用一个名为user_sessions的表。
$results = DB::table('user_sessions') ->select(DB::raw('HOUR(login_time) AS hour, SUM(TIME_TO_SEC(TIMEDIFF(logout_time, login_time))) AS seconds'))->whereTime('login_time', '>=', $loginTime) ->whereTime('logout_time', '<=', $logoutTime) ->groupBy(DB::raw('HOUR(login_time)')) ->get(); $formattedResults = []; foreach ($results as $result) { $formattedResults[] = [ 'hour' => $result->hour, 'seconds' => $result->seconds, ]; } return json_encode($formattedResults);
希望这能帮上忙。或者至少给你一个想法🙃。
s6fujrry2#
您可以使用日志文件,因此当用户登录或注销时写入此文件,并在该时刻打印时间戳。然后,您可以通过阅读该文件进行查询,并根据该条件进行分组,以秒为单位创建日期差异。更具体的信息将是有价值的。
2条答案
按热度按时间np8igboo1#
因此,另一种高性能的方法是使用原始SQL。我假设你正在使用一个名为user_sessions的表。
希望这能帮上忙。或者至少给你一个想法🙃。
s6fujrry2#
您可以使用日志文件,因此当用户登录或注销时写入此文件,并在该时刻打印时间戳。
然后,您可以通过阅读该文件进行查询,并根据该条件进行分组,以秒为单位创建日期差异。
更具体的信息将是有价值的。