设置mysql数据库以记录任务
我正在尝试使用PHPMyAdmin设置MySQL数据库。在我长时间使用它之前,我需要关于设置和查询它的建议。我把桌子摆成这样设置mysql数据库以记录任务,mysql,sql,database,time,task,Mysql,Sql,Database,Time,Task,我正在尝试使用PHPMyAdmin设置MySQL数据库。在我长时间使用它之前,我需要关于设置和查询它的建议。我把桌子摆成这样 id: primary ket time_in: date time_out: date task: varchar (128) business: varchar (128) 我所需要做的就是跟踪每项任务花费了多少时间以及用于哪些业务。这是一个好方法还是有更好的方法 如果这是正确的,那么我将试图找出如何查询时间。这是我提出的一个问题,但它远远不是我想要的 SELECT
id: primary ket
time_in: date
time_out: date
task: varchar (128)
business: varchar (128)
我所需要做的就是跟踪每项任务花费了多少时间以及用于哪些业务。这是一个好方法还是有更好的方法
如果这是正确的,那么我将试图找出如何查询时间。这是我提出的一个问题,但它远远不是我想要的
SELECT `Task`,`Business`, (SELECT `Time-Out` - `Time-In`) as `total time` FROM `Sheet`
有没有办法将总时间转换成更可读的格式?您需要使用TIMEDIFF(结束时间、开始时间)和time(时间)转换成秒数。然后,您可以将秒数转换为所需的任何格式 因此,对于每个任务的时间:
select ID
,task
,business
,time_to_sec(timediff(time_out, time_in)) as duration
from sheet
要按任务和业务进行聚合,请执行以下操作:
select task
,business
,sum(time_to_sec(timediff(time_out,time_in))) as total_time
from sheet
group by task
,business
除非您以天为单位跟踪时间,否则我建议使用
time
或DATETIME
作为time\u in
和time\u out
列
就个人而言,我可能会将time\u out
null设置为空,以允许跟踪当前活动(我已经开始了,但还没有完成)
不需要使用子选择来减去时间戳,您也可以内联减去这两列(只需在此处删除select
关键字)。对于格式化,您可以使用TIMEDIFF
功能:
SELECT '12:00:00' - '10:45:00';
-> 2
SELECT TIMEDIFF('12:00:00', '10:45:00');
-> '01:15:00'
这将使您的问题:
SELECT `Task`, `Business`, TIMEDIFF(`Time-Out`, `Time-In`) as `total time` FROM `Sheet`
SELECT TIMEDIFF(NULL, '10:45:00');
-> NULL
如果将超时
(或超时
)设为空,则需要在查询中考虑这一点:
SELECT `Task`, `Business`, TIMEDIFF(`Time-Out`, `Time-In`) as `total time` FROM `Sheet`
SELECT TIMEDIFF(NULL, '10:45:00');
-> NULL
因此,正在进行的任务将使总时间为空。如果您想知道您已经工作了多长时间,可以将其包装在IFNULL
函数中,并在这种情况下获取当前时间:
SELECT TIMEDIFF(IFNULL(`Time-Out`, NOW()), `Time-In`);
-> '01:15:00' if `Time-Out` is 12:00:00 and `Time-In` is 10:45:00
-> '02:05:13' if `Time-Out` is NULL and it's currently 12:50:13 (server time)
你可能想用datetime而不是date。谢谢你,非常有帮助。@Husbandman,你通常应该对那些有帮助的答案进行投票,如果答案是你对问题的首选答案,你应该接受它。谢谢,非常有帮助。