时间表MySQL查询

时间:2011-11-03 21:14:46

标签: php mysql database-design

我在MySQL中有一张工作考勤卡,但我无法使用VIEWFUNCTION来投入时间。我想使用MySQL函数调用getTodaysHours (user CHAR(45))来返回用户当天的小时数(包括自打卡后的小时数)。问题是我不知道如何在FUNCTION中执行数学运算。

这是我的表:

Time Sheet

这是我的“陷入困境”的程序:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `getTodaysHours`(OUT hours INT, IN user CHAR(45))
BEGIN
  SELECT SUM(timestamp) FROM info
  WHERE DATE( FROM_UNIXTIME(timestamp-25200) )=CURDATE() AND
  fullname=user
  ORDER BY timestamp ASC;
END

显然SUM()不是我想要使用的,但我希望其余的工作。

1 个答案:

答案 0 :(得分:0)

如果人们可以在同一天多次上下班,那么只使用一个带有上面显示的数据库结构的纯SQL语句就很难做到。

如果它知道你每天只能登记/退房一次,那么这将是有用的

SELECT COALESCE(out.timestamp, UNIX_TIMESTAMP()) - in.timestamp
FROM info in
LEFT OUTER JOIN info out on in.fullname = out.fullname
WHERE in.inout = 'in'
AND out.inout = 'out'
AND DATEDIFF( FROM_UNIXTIME(in.timestamp),CURDATE()) = 0
AND DATEDIFF( FROM_UNIXTIME(out.timestamp),CURDATE()) = 0 

如果您添加一个跟踪输入/输出对的列,则可以轻松比较,因为您可以加入该列。现在的方式是你必须做一个相关的子选择,以便在输入之后找到下一个最近的。

总而言之,你应该制定这个程序,因为在数据不符合查询期望的情况下,单个SQL语句不会返回正常的错误(现在两个ins已经超出了上述情况)