2013-05-06 2 views
0

У меня возникла проблема с sql. Мне нужно написать сложный запрос для таблицы, описанной нижевосстановить уникальный идентификатор отеля для пользователей для системы бронирования

id date  quantity roomtypeid hotelid 

Пользователя будет искать отели, используя чек, и проверить дату и указать номера комнаты (количество) с поисковым запросом, так что мне нужно сделать, это получить идентификаторы отелей из таблицы выше, которые имеют минимальное количество номеров, доступных при регистрации заезда, чтобы проверить дату.

1 04-01-2013 3 4 10 
2 04-02-2013 3 4 10 
3 04-03-2013 3 4 10 
4 04-04-2013 3 4 10 
5 04-01-2013 3 4 11 
6 04-02-2013 3 4 11 
7 04-03-2013 3 4 11 
8 04-04-2013 3 4 11 
9 04-01-2013 3 4 12 
10 04-02-2013 3 4 12 

Полученный запрос должен дать только 10,11 в отеле идентификатору, если пользователь хочет забронировать от 04-01-2013 до 04-03-2013 с 3-х комнат.

С уважением Subash

+0

Вопрос не совсем понятно. Можете ли вы подробнее рассказать или дать более подробную информацию. –

+0

Так что же попробовали? так что ваши усилия. – 2013-05-06 06:53:49

+0

необходимо указать количество мест, и все даты между датой начала и окончания должны присутствовать в столбце даты, например, если я бронирую со 2-го по 4-й день, тогда номера должны быть доступны для 2,3,4 дат – Subash

ответ

0
SELECT DISTINCT(`hotelid`) FROM `tableName` WHERE `date` = $checkindate AND `date` = $checkoutdate AND `quantity` = $numberofroom 

Используйте приведенный выше запрос. это только манекен запрос изменить его в соответствии вам (поля имя и имена переменных)

1

UPDATE2

SELECT `hotelid` 
    FROM table1 
WHERE `date` BETWEEN '2013-04-01' AND '2013-04-03' 
    AND quantity >=3 
GROUP BY `hotelid` 
HAVING COUNT(*) = DATEDIFF('2013-04-03', '2013-04-01') + 1 

3 в предложении WHERE ряд комнат, которые должны быть доступны.

Выход

| HOTELID | 
----------- 
|  10 | 
|  11 | 

SQLFiddle

+0

Это не работает, так как могут быть одинаковые даты с разными идентификаторами номеров, и это испортит ваши расчеты, 'code' (1, '2013-04-01', 3, 4, 10), \t (2, '2013-04-03', 3, 4, 10), \t (3, '2013-04-04) , 3, 4, 10), \t (4, '2013-04-01', 3, 4, 11), \t (5, '2013-04-02', 3, 4, 11) , \t (6, '2013-04-03', 3, 4, 11), \t (7, '2013-04-04', 3, 4, 11), \t (8, '2013-04-01', 3, 4, 12), \t (9, '2013-04-02) (3, 4, 10), \t \t (12, '2013-04-05', 3, 7, 10) 'code' – Subash

+0

@Subash Если вы не заботитесь о типах номеров, не используйте его в' GROUP BY'. См. Обновленный ответ и SQLFiddle – peterm

+0

, он все еще не работает, вы вычисляете сумму и проверяете в целом, а не на отдельных комнатах, поэтому, если количество минут в номере равно 3, то если в отеле 1 комната на 1 день и 3 комнаты на следующий день, то этот отель передан как действительный, который не является – Subash

Смежные вопросы