gpt4 book ai didi

php - 带有子句的 TIMESTAMPDIFF

转载 作者:行者123 更新时间:2023-11-29 21:34:55 25 4
gpt4 key购买 nike

我的 MySQL 查询有一个小问题:

表格是这样的

id  timedate            user  action
1 2010-01-01 10:01:01 AB991 login
2 2010-01-01 12:01:01 AB991 logout
3 2010-01-01 14:01:01 AB991 login
4 2010-01-01 18:01:01 AB991 logout
5 2010-01-01 10:01:01 ZM991 login
6 2010-01-01 10:01:01 ZM991 logout
7 2010-01-02 10:01:01 AB991 login
8 2010-01-02 18:01:01 AB991 logout
9 2010-01-02 10:01:01 ZM991 login

现在,我需要一个查询或一些 PHP 代码来每天计算每个用户登录和注销之间的分钟差。但可能会出现一些问题,例如:

  1. 可能没有记录注销
  2. 一天内我可能有 2 次登录和 2 次注销操作或更多。

有聪明的解决方案(也许只有MySQL)或者我必须使用PHP并制作代码墙?

最佳答案

可能的解决方案如下:

select id, timedate, action
from mytable
where user = 'AB991'
order by timedate

您的 PHP 代码将获得按日期排序的列表。该算法应如下所示:

$user = 'AB991';
$stmt = $db->prepare("select id, timedate, action from mytable where user = ? order by timedate");
$stmt->execute(array($user));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$previousTime = "";
foreach ($rows as $row) {
if ($row["action"] === "login") {
$previousTime = strtotime($row["timedate"]);
} else if ($row["action"] === "logout") {
if ($previousTime === "") {
//duplicate logout
} else {
//add the remaining time to the day when the user logged in
//add the whole days passed between log in and log out
//add the start of the last day when the user logged in
$previousTime = "";
}
}
}

问题:

  • 用户可能会分别使用不同的 session 登录
  • 用户可能无法注销
  • 用户可能会使用不同的 session 注销

建议:我会修改表格以包含 session ID 和最后一个操作。当用户执行操作时,最后一个操作的时间戳将会更新,因此您将拥有基于 session 的数据,其中每一行都会说明自己,显示登录时间和最后一个操作时间。

关于php - 带有子句的 TIMESTAMPDIFF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34995898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com