Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置mysql数据库以记录任务_Mysql_Sql_Database_Time_Task - Fatal编程技术网

设置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

我正在尝试使用PHPMyAdmin设置MySQL数据库。在我长时间使用它之前,我需要关于设置和查询它的建议。我把桌子摆成这样

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,你通常应该对那些有帮助的答案进行投票,如果答案是你对问题的首选答案,你应该接受它。谢谢,非常有帮助。