2013-07-25 2 views
2

Я работаю над системой расписания PHP/MySQL, и отчет, который я хочу создать, выбирает всех сотрудников, которые работали меньше необходимого количества времени между двумя датами. Время работы сотрудника хранится в часах и минутах (INT), но меня интересуют только часы.Выберите, где сумма меньше значения

Стол сотрудник выглядит следующим образом:

ID | Name 
1 | George 
2 | Fred 

timesheet_entry стол:

ID | employeeID | hour | date 
1 | 1   | 2 | 2013-07-25 
2 | 2   | 4 | 2013-07-25 
3 | 1   | 3 | 2013-07-25 

Так что, если я ВЫБРАТЬ сотрудников, которые работали менее чем за 5 часов (PHP переменная hrsLimit) на 2013-07- 25, он должен вернуть 2 Фреда, так как Джордж работал в общей сложности 5 часов в этот день. У меня есть HTML-форма, поэтому пользователь может установить переменные для запроса.

Я попытался:

SELECT employeeid, 
     employeename 
FROM employee 
     JOIN timesheet_entry tse 
     ON tse.tse_employeeid = employeeid 
      AND Sum(tse.hour) < $hrslimit 

Я не беспокоюсь о дате еще.

Путаница здесь заключается в том, что мы соединяем две таблицы. Возможно, я должен выбрать часы и вместо этого поставить предложение SUM в конце в WHERE?

ответ

2

Вам необходимо сгруппировать данные, а затем поместить условие СУММЫ в часть запроса HAVING.

select employee.id, 
     employee.Name, 
     Date, 
     sum(`hour`) 
from timesheet_entry 
join employee on timesheet_entry.employeeID=employee.ID 
group by timesheet_entry.employeeID,date 
having sum(`hour`)<$hrslimit 

SQLFiddle demo

+0

'сумма (час), как sum_hour' ', а затем имеющие sum_hour <$ hrslimit' не должны иметь более высокую производительность? – jaczes

+0

@jaczes Хорошо. Я думаю, что оптимизатор SQL сделает производительность такой же. – valex

+0

@valex Спасибо, и спасибо за быстрый ответ. Мой пример не был лучшим, все в тот же день, но теперь я добавил предложение GROUP BY date BETWEEN http://sqlfiddle.com/#!2/1e454/3, чтобы завершить мое решение. Еще раз спасибо –

Смежные вопросы