员工可在日期范围之间执行任务

时间:2015-07-14 08:00:04

标签: mysql date date-range

我一直致力于员工工作管理项目,我有点陷入困境。我有3张桌子:

1:  employees

    empid,       empFirst     empLast
    1            jon          smith
    2            mark         road
    3            jane         hall
2:  holiday

    id        employee id      datestart       dateend
    1         2                2015-08-07      2015-08-12
    2         3                2015-07-4       2015-07-11
    3         2                2015-07-20      2015-07-24
3: Task Assigned

   id      taskid        assignedTo(userid)        startTask      endTask
   1       1               1                     2015-07-10      2015-07-14
   2       2               2                     2015-07-29      2015-07-29
   3       2               3                     2015-07-18      2015-07-30
   4       3               2                     2015-08-30      2015-09-03
   5       4               2                     2015-09-10      2015-09-03

我不确定如何查询表以查看谁可用于日期范围内的任务(多个用户分配到同一任务)。我有一个查询,我会在这里:

所以,如果你把假期表拿出来,如果是等式,只需运行下面的查询

SELECT employees.empId, employees.empFirst, employees.empLast
FROM employees 
LEFT JOIN taskassigned 
ON employees.empId = taskassigned.assignedTo
WHERE taskassigned.assignedTo IS NULL or  
 not (taskassigned.startTask  BETWEEN '2015-07-29 14:30:00' AND '2015-07-29 18:30:00' 
   or taskassigned.endTask  BETWEEN '2015-07-29 14:30:00' AND '2015-07-29 18:30:00')

我得到的结果是:

empId  empFirst empLast
1      jon      smith   (he is available)
2      mark     road    
2      mark     road

如您所见,Mark在此日期(在任务表中)不可用。

我想首先查询假期表以查看他们是否正在休假,然后在任务表中查看他们是否已经在日期范围内有任务,然后结果向我展示该任务的可用性。

2 个答案:

答案 0 :(得分:0)

我现在无法测试,但请尝试:

beforeCommandExec

这将检查指定的开始日期是否不在指定任务的开始日期或结束日期之间,以及指定的结束日期是否落在指定任务的开始日期或结束日期之间,然后执行相同操作假期。

答案 1 :(得分:0)

您好,我现在没有正确的测试工具,但您可以尝试这样做:

使用日期比较时:

  • 尝试转换/转换为DATE(确保不包含时间)以确保结果正确。

  • 据我所知,在开始和结束日期之间使用时也包括在内(可能在某些RDMS功能中)

另外,对于包括假期,你能做的就是这样(或者):

  • 首先加入假期表,然后再次使用任务分配表结果加入。

  • 首先加入任务分配表,然后再次使用结果加入假日表

很抱歉没有包含任何代码,因为我没有时间设置。