Armageddance
Новичок
Помогите разобраться со сложным запросом с большим количеством подзапросов.
Суть - нужно выбрать все услуги, в которые записан клиент одновременно в определенный промежуток времени.
category - таблица услуг: name - название услуги, sid - идентификатор услуги.
sessions - таблица записей: service_id - идентификатор услуги в ней, start_time - время начала оказания услуги, end_time - время окончания оказания услуги, session_id - идентификатор записи.
client_sessions - таблица связи клиентов и записей. client_id - идентификатор клиента, session_id - идентификатор записи.
Сам запрос, который составил:
сейчас он возвращает 0 строк при записанном одновременно на разные услуги в пересекающееся время клиенте.
Суть - нужно выбрать все услуги, в которые записан клиент одновременно в определенный промежуток времени.
category - таблица услуг: name - название услуги, sid - идентификатор услуги.
sessions - таблица записей: service_id - идентификатор услуги в ней, start_time - время начала оказания услуги, end_time - время окончания оказания услуги, session_id - идентификатор записи.
client_sessions - таблица связи клиентов и записей. client_id - идентификатор клиента, session_id - идентификатор записи.
Сам запрос, который составил:
PHP:
SELECT name FROM category WHERE sid IN(
SELECT DISTINCT service_id FROM sessions WHERE session_id IN (
SELECT session_id FROM sessions WHERE
((start_time<=(SELECT start_time FROM sessions WHERE session_id='$session_id') AND end_time>=(SELECT start_time FROM sessions WHERE session_id='$session_id'))
OR (start_time<=(SELECT end_time FROM sessions WHERE session_id='$session_id') AND end_time>=(SELECT end_time FROM sessions WHERE session_id='$session_id'))
OR (start_time>=(SELECT start_time FROM sessions WHERE session_id='$session_id') AND end_time<=(SELECT end_time FROM sessions WHERE session_id='$session_id'))
OR (start_time<=(SELECT start_time FROM sessions WHERE session_id='$session_id') AND end_time>=(SELECT end_time FROM sessions WHERE session_id='$session_id')))
AND session_id<>'$session_id'
AND session_id IN (SELECT session_id FROM client_sessions WHERE client_id='$client_id')))";