Суть - нужно выбрать все услуги, в которые записан клиент одновременно в определенный промежуток времени.
category - таблица услуг: name - название услуги, sid - идентификатор услуги.
sessions - таблица записей: service_id - идентификатор услуги в ней, start_time - время начала оказания услуги, end_time - время окончания оказания услуги, session_id - идентификатор записи.
client_sessions - таблица связи клиентов и записей. client_id - идентификатор клиента, session_id - идентификатор записи.
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'
                     )
                )Вот такой запрос возвращает какие-то услуги, но не те, какие нужно вернуть, что-то у него с логикой (со скобками) не так….