Объединение нескольких строк для создания диапазона дат - PullRequest
0 голосов
/ 06 сентября 2011

Я не уверен, возможно ли это с MySQL, и это немного сложнее, но я постараюсь объяснить как можно лучше.

Я исправляю систему доступности жилья и проверки цен на основесуществующая база данных.Посетитель сможет выбрать дату приезда и отъезда, и я хочу показать все цены / предложения, доступные на эти даты.Легко.Однако предложение может быть настроено так, чтобы оно было доступно только для первой части данного диапазона дат, и для этого типа номера может быть установлена ​​вторая ставка, охватывающая более позднюю часть диапазона дат.

например, Iвыберите 29 сентября до 3 октября для моего пребывания.Для комнаты 1 установлена ​​ставка на период с 1 по 30 сентября, а для ставки на 1 - 31 октября - вторая ставка.

Могу ли я запросить таблицу, чтобы проверить, есть ли помимо тарифов, охватывающих весь диапазон,объединяет (или, может быть, даже больше) тарифы для одного и того же номера комнаты, которые вместе охватывают диапазон дат, и извлекает тарифы и описания для них?

В приведенном ниже запросе проверяются базовые тарифы, действительные между указанными датами (где roomtype - это идентификатор комнаты):

SELECT id, caption, price, startdate, enddate, nights, roomtype,
(@arrival := DATE('2011-09-29')) AS arrivaldate,
(@departure := DATE('2011-10-05')) AS departuredate
FROM bnbrates
WHERE
bnb_ref = 16639
AND active = 'TRUE'
AND rooms != 0
AND @arrival < enddate
AND @departure > startdate
AND roomtype != ''  
ORDER BY roomtype, enddate, startdate, price;

, и это пример сохраненных данных:

id       | caption     | price | startdate     | enddate      | nights | roomtype | arrivaldate | departuredate
-------------------------------------------------------------------------------------------------------------------
23553 | Single      | 50     | 2011-10-01 | 2011-10-31 | 1        | 1064       | 2011-09-29 | 2011-10-05
23544 | Double     | 55     | 2011-09-01 | 2011-09-30 | 1        | 1647       | 2011-09-29 | 2011-10-05
23545 | Double     | 80     | 2011-10-01 | 2011-10-31 | 1        | 1647       | 2011-09-29 | 2011-10-05
30312 | Triple       | 109   | 2011-09-01 | 2011-09-30 | 1        | 1649       | 2011-09-29 | 2011-10-05
34234 | Executive | 109   | 2011-09-01 | 2011-09-30 | 1        | 1653       | 2011-09-29 | 2011-10-05
23569 | Executive | 99     | 2011-10-01 | 2011-10-31 | 1        | 1653       | 2011-09-29 | 2011-10-05

Желаемый результат, например, объединит 23544 с 23545 и 34234с 23569

Заранее благодарю за помощь и извиняюсь, если это не имеет смысла ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...