Я работаю над проектом управления работой сотрудников, и я немного застрял. У меня есть 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
Как вы можете видеть, Марк не доступен в эту дату (в таблице задач).
Прежде всего, я хочу, чтобы в праздничной таблице был запрос, находятся ли они в отпуске, а затем в таблице задач, чтобы увидеть, есть ли у них задача в диапазоне дат, а затем результат, чтобы показать мне, как это доступно для задачи.
Слишком устал, чтобы получить полный ответ, но попробуйте подумать об этом по-другому. Вы пытаетесь выяснить, свободен ли сотрудник между «2015-07-29 14: 30: 00» и «2015-07-29 18: 30: 00», поэтому в предложении 'WHERE' см., Если' 2015-07-29 14: 30: 00' не находится между 'taskassigned.startTask' и 'taskassigned.endTask', а если' 2015-07-29 18: 30: 00' не находится между 'taskassigned.startTask' и' taskassigned.endTask'. – Will