Поиск свободных номеров по дате

Вот такой вопрос (по хитрому запросу): у меня в базе хранится информация о забронированных номерах. Структура таблицы следующая: ( id int(10) unsigned NOT NULL AUTO_INCREMENT, item int(10) unsigned NOT NULL, datefrom datetime NOT NULL, datetill datetime NOT NULL, PRIMARY KEY (id), KEY item (item,datefrom,datetill) ) То есть каждая запись содержит информацию с какого (datefrom) по какое (datetill) номер забронирован. Мне надо по условию (желаемые даты въезда и отбытия) найти свободные номера. То есть это будут номера, для которых на указанные даты нет брони. Мой запрос такой: <?php print '<pre>';

$datefrom = "2013-04-06 12:00:01"; $datetill = "2013-04-08 11:59:59";

$c = $modx->newQuery('HotelRoomItem'); $c->leftJoin('HotelRoomReserve', 'Reserves', "Reserves.item=HotelRoomItem.id AND ( (Reserves.datefrom between '{$datefrom}' AND '{$datetill}') OR (Reserves.datetill between '{$datefrom}' AND '{$datetill}') OR (Reserves.datefrom < '{$datefrom}' AND Reserves.datetill > '{$datetill}') )" );

$c->select(array( 'HotelRoomItem.id as item_id', 'Reserves.*', ));

$where = array( 'HotelRoomItem.active' => 1, 'Reserves.id' => null, );

$c->where($where); Конечный запрос: SELECT HotelRoomItem.id as item_id, Reserves.* FROM modx_hotel_room_items AS HotelRoomItem LEFT JOIN modx_hotel_room_reserve Reserves ON Reserves.item=HotelRoomItem.id
AND (
(Reserves.datefrom between '2013-04-06 12:00:01' AND '2013-04-08 11:59:59')
OR (Reserves.datetill between '2013-04-06 12:00:01' AND '2013-04-08 11:59:59')
OR (Reserves.datefrom < '2013-04-06 12:00:01' AND Reserves.datetill > '2013-04-08 11:59:59')
) WHERE ( HotelRoomItem.active = 1 AND Reserves.id IS NULL ) Вопрос: есть ли у кого какие-нибудь мысли по этому поводу? Может более оптимальный запрос возможен?