У меня есть три таблицы в MySQL. Персонал с полями id, имя, фамилия, телефон, адрес, id_work.
Работа с полями id, name.
Отсутствие с полями id, name, id_staff start_date и duration.
У меня есть следующий запрос:
SELECT COUNT(*)
FROM staff s
JOIN work w
ON s.id_work = w.id
LEFT JOIN absence a
ON s.id = a.id_staff AND a.name = 'vacations'
WHERE (w.name='sales manager' AND a.id_staff IS NULL)
OR (w.name='sales manager')
AND (a.start_date>NOW () OR DATE_ADD (a.start_date,INTERVAL a.duration DAY)< NOW ())
Я хочу изучить случай существующих сотрудников, которые не отсутствовали, и случай существующих сотрудников, которые имели отсутствие, но на сегодня это не является приограммой. Основная концепция заключается в том, что этот запрос возвращает сотрудников компании, которая присутствует.
Моя проблема в том, что человек, у которого всего два случая, например один был на 7/7/2017, а продолжительность была на 10 дней, а другая на 19/8/2017, а продолжительность на 5 дней, запрос возвращает количество () = 1, что неправильно. Я хочу отображать количество () = 0, потому что сегодня этот работник присутствует на своей работе
OR DATE_ADD(a.start_date, INTERVAL a.duration DAY) < NOW ()
ваше состояние OR (w.name='sales manager')
добавляет ВСЕ случаи, когда w.name = sales Manager
Нужно поставить скобки вокруг первых двух условий (я думаю)
РЕДАКТИРОВАТЬ:
я имею в виду, как это
WHERE ((w.name='sales manager' AND a.id_staff IS NULL)
OR w.name='sales manager')
но это не имеет смысла, так как первое условие отменяется вторым, и я не совсем понимаю, чего вы хотите достичь