php - MYSQL - 时钟计算本周每一天的进出时间

标签 php mysql

下面是我的数据库timeclock的表格,它记录了员工上类/下类的每条记录。我想创建一个函数,返回本周周一至周日每天的小时数。

id  user    timeinout           type    function    
1   1   2015-08-05 20:20:32     in         1
2   1   2015-08-05 20:20:56     out        1
3   1   2015-08-05 20:29:25     in         1
4   1   2015-08-05 20:32:04     out        2
5   1   2015-08-05 20:36:28     in         1
6   1   2015-08-05 20:40:00     out        1
7   1   2015-08-06 09:05:39     in         1

我知道这个函数是错误的,但这就是我所在的位置。我以前从未这样做过,所以我真的很茫然,我尝试过的所有例子都失败了。

function gettimeclockHours($user) {
  include $_SESSION['db'];
  try {
      $sql = "SELECT HOUR(timeinout) as hour, COUNT(*) as num_rows FROM timeclock WHERE user = :user GROUP BY HOUR(timeinout)";
      $s = $pdo->prepare($sql);
      $s->bindValue(':user', $user);
      $s->execute();
  }
  catch (PDOException $e)
  {
      $error = 'Error.' . $e->getMessage();
      moduleError($error);
      exit();
  }
  $result = $s->fetch();
  return $result;
}

我正在寻找的输出示例如下。

Day of Week     Total Time
Monday          1.2 Hours
Tuesday     
Wednesday   
Thursday    
Friday  
Saturday    
Sunday  

感谢您提前提供的帮助。

最佳答案

按工作日(周一、周二等)分割日期实际上是一个简单的问题。您可以使用DAYNAME()功能。

更有趣的任务是计算用户进入的时间。 它可以是 sum(outs_time)-sum(ins_time),但以防万一,当用户在 23:45 到达并在第二天 00:15 离开时,它将不起作用。在这种情况下,我们需要在 24:00:00 添加额外的内容

我会寻求以下解决方案: 1. 将时间转换为从一天开始算起的秒数 ( TIME_TO_SEC() 2.检查最后一个 Action 是“in”并在子查询中做一个标志

select if(max(if(type = 'in', timeinout, 0)) > max(if(type = 'out', timeinout, 0)), 1,0) // 1 - last type is in, 0 - last type is out
from timeclock t1 
  • 如果最后输入=“in”,则最终查询会添加 24 小时

    select DAYNAME(timeinout) as weekday_name,
    (
      sum(if(type = "out",TIME_TO_SEC(timeinout), 0)) - 
      sum(if(type = "in",TIME_TO_SEC(timeinout), 0)) + 24*60*60*
      (select if(max(if(type = 'in', timeinout, 0)) > max(if(type = 'out', timeinout, 0)), 1,0) // 1 - last type is in, 0 - last type is out
        from timeclock t1 
        where t1.user = t2.user and date(t1.timeinout) = date(t2.timeinout))
    )/60/60 hours
    FROM timeclock t2
    GROUP BY user, date(timeinout)
    
  • 关于php - MYSQL - 时钟计算本周每一天的进出时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31861927/

    相关文章:

    php - Mysql 按两列排序

    php - 尝试调整缩略图的大小和裁剪图像

    mysql - 如何为 ASP.NET 表适配器设置 MySQL 数据库的连接字符串

    php - 如何在 PHP 或 MySQL 中将字符串转换为列表

    PHP - 未选择数据库。我的代码有什么问题吗?

    php - 更改来自数据库的日期格式?

    php - PHP 中的 SQL 查询仅适用于函数之外

    php - 有没有可能做比这更短的 "if file exists then append, else create new file"

    php - 使用前端搜索条件查询数据库

    php - SQL错误: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax