SELECT u_access FROM bookings, users WHERE b_rid=$room AND b_date='$theDate' AND b_uid=u_id AND b_id IN (SELECT b_id FROM bookings WHERE b_id IN (SELECT b_id FROM bookings WHERE '$from' BETWEEN b_time_from AND b_time_till OR '$till' BETWEEN b_time_from AND b_time_till ) OR b_id IN (SELECT b_id FROM bookings WHERE '$from' BETWEEN b_time_from AND b_time_till AND '$till' BETWEEN b_time_from AND b_time_till ) OR b_id IN (SELECT b_id FROM bookings WHERE b_time_from BETWEEN '$from' AND '$till' AND b_time_till BETWEEN '$from' AND '$till' ) ) you're basically searching for any booking which has a start before the period you specify ends, and an end AFTER the period you specify begins... therefore b_time_till > $from AND b_time_from < $till does the same thing as all 3 of your sub-selects SELECT u_access FROM bookings, users WHERE b_rid=$room AND b_uid=u_id AND (b_time_till > '$from' AND b_time_from < '$till') AND b_id IN (SELECT b_id FROM bookings WHERE b_date='$theDate')