Официальный сайт студ.городка НГТУ
Программирование и БД » Составление SQL запроса 

#1  08.12.09 10:40

Составление SQL запроса

Нужно тянуть из БД всю информацию о номере гостиницы, мы проверяем доступен ли номер в текущий момент. Эта проверка осуществляется за счет того, существует ли цена на этот номер в текущий момент (или момент указанный пользователем) Сейчас появилась необходимость добавить информацию, при запросе, о том находится ли гостиница в "свободной продаже" или нет. Что такое "свободная продажа" - это наличие определенного числа номеров, которые гостиница точно сможет предоставить для бронирования. Если же количество номеров к свободной продаже = 2, и пользователей на этот период уже забронировало этот номер тоже 2, то в результате нужно вывести что гостиниц в свободной продаже не осталось (читай 0). Вот запрос:

Код::

SELECT
	HotelRooms.hotelroom_id,
	HotelRoomTypes.name as typename,
        Meals.name as included_meal,
        (Rates.free_sale - COUNT(...)) as free_sale
FROM HotelRoomTypes, HotelRooms LEFT OUTER JOIN Rates ON (HotelRooms.hotelroom_id = Rates.hotelroom_id)
         LEFT OUTER JOIN RatesMeals ON (Rates.rate_id = RatesMeals.rate_id) 
         LEFT OUTER JOIN Meals ON (RatesMeals.meal_id = Meals.meal_id)
         LEFT OUTER JOIN Reservation ON (HotelRooms.hotelroom_id = Reservation.hotelroom_id)
WHERE
	HotelRooms.hotel_id = ".$hotel_id." AND
	HotelRooms.hotelroomtype_id = HotelRoomTypes.hotelroomtipe_id AND
        (
        	(Rates.start_date <= :enter AND Rates.end_date >= :exit) OR
                (Rates.start_date <= :enter AND Rates.end_date = '0000-00-00')
        )

Небольшие пояснения:
HotelRooms - Номера гостиниц. HotelRoomTypes - фиксированные типы номеров(double, single и т д). Meals - Питание в номере. Rates - Разнообразные цены. Reservation - таблица данных о броне.

В таблице Rates и содержатся все необходимые данные. Атрибут free_sale - количество номеров в свободной продаже. А start_date и end_date - это даты действия цен.

Все зарегистрированные заказы находятся в таблице Reservation и тоже имеют поля arrival_date и departure_date (время заезда и выезда, соответственно)

Так вот, как бы оптимизировать этот запрос, что поставить вместо COUNT(...) Для того, чтобы высчитывать количество свободных номеров в "свободной продаже" (извиняюсь за тавтологию)

PS. Понимаю что структура достаточно сложная для понимания. Поэтому на все вопросы постараюсь ответить.

Offline

Программирование и БД » Составление SQL запроса 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.024 сек.
Выполнено 14 запросов.