#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

