Я пытаюсь запросить базу данных, чтобы найти следующее.
Если клиент ищет отель в городе между датами A и B, найдите и верните отели, в которых свободные номера между двумя датами.
В каждом номере будет более одной комнаты (то есть 5 комнат типа A, 10 комнат типа B и т. Д.), И мы должны запросить базу данных, чтобы найти только те отели, в которых есть хотя бы одна. комната свободна хотя бы в одном типе.
Это моя структура таблицы:
**Structure for table 'reservations'**
reservation_id
hotel_id
room_id
customer_id
payment_id
no_of_rooms
check_in_date
check_out_date
reservation_date
**Structure for table 'hotels'**
hotel_id
hotel_name
hotel_description
hotel_address
hotel_location
hotel_country
hotel_city
hotel_type
hotel_stars
hotel_image
hotel_deleted
**Structure for table 'rooms'**
room_id
hotel_id
room_name
max_persons
total_rooms
room_price
room_image
agent_commision
room_facilities
service_tax
vat
city_tax
room_description
room_deleted
А это мой запрос:
$city_search = '15';
$check_in_date = '29-03-2010';
$check_out_date = '31-03-2010';
$dateFormat_check_in = "DATE_FORMAT('$reservations.check_in_date','%d-%m-%Y')";
$dateFormat_check_out = "DATE_FORMAT('$reservations.check_out_date','%d-%m-%Y')";
$dateCheck = "$dateFormat_check_in >= '$check_in_date' AND $dateFormat_check_out <= '$check_out_date'";
$query = "SELECT $rooms.room_id,
$rooms.room_name,
$rooms.max_persons,
$rooms.room_price,
$hotels.hotel_id,
$hotels.hotel_name,
$hotels.hotel_stars,
$hotels.hotel_type
FROM $hotels,$rooms,$reservations
WHERE $hotels.hotel_city = '$city_search'
AND $hotels.hotel_id = $rooms.hotel_id
AND $hotels.hotel_deleted = '0'
AND $rooms.room_deleted = '0'
AND $rooms.total_rooms - (SELECT SUM($reservations.no_of_rooms) as tot
FROM $reservations
WHERE $dateCheck
GROUP BY $reservations.room_id) > '0'";
Количество номеров, уже зарезервированных в каждом типе номеров в каждом отеле, будет сохранено в таблице бронирования.
Дело в том, что запрос вообще не возвращает никакого результата. Хотя это должно произойти, если я сам вычислю это вручную.
Я пытался запустить подзапрос самостоятельно, но я не получил никакого результата. И я потерял некоторое количество волос, пытаясь убрать этот запрос со вчерашнего дня. Что с этим не так? Или есть лучший способ сделать то, что я упомянул выше?
Редактировать: Код отредактирован для удаления ошибки. Благодаря Марк Байерс .
Sample Data in reservation table
1 1 1 2 1 3 2010-03-29 2010-03-31 2010-03-17
2 1 2 3 3 8 2010-03-29 2010-03-31 2010-03-18
5 1 1 5 5 4 2010-03-29 2010-03-31 2010-03-12
Подзапрос должен вернуть
Room ID : 1 Rooms Booked : 7
Room ID : 2 Rooms Booked : 8
But it does not return any value at all.... If i remove the dateCheck condition it returns
Room ID : 2 Rooms Booked : 8