![periods](https://i.stack.imgur.com/S3GJP.png)
Привет всем,
Мне нужно создать запрос для поиска дома, который бы соответствовал введенным пользователем данным в базе данных: дата, когда они хотят переместиться и уйти,количество людей в группе и цена за ночь.
Допустим, пользователь искал дом:
даты: с 2011-01-15 по 2011-03-01 (см. Период A1C1), для 3 человек, и он готов тратить от 90 до 125 долларов за ночь.
Это мои ручные вычисления для этого поиска:
- даты доступны в базе данных
- общее количество дат, которые пользователь хочет остаться: 44 дня
- цена за первый период 2011-01-15 до 2011-01-25 - 10 дней * 100 долл. США = 1000
- цена за второй период с 2011-01-25 по 2011-02-14 - 20 дней * 120 долл. США = 2400
- цена за третий период 2011-С 02-14 по 2011-03-01 составляет 14 дней * 140 долларов США = 1960 долларов
- общая средняя цена за ночь = 1000 + 2400 + 1960/44 = 121,8
- ценыe и количество людей соответствует вводу пользователя, поэтому мы отображаем этот дом
Если вы объединяете даты и рассчитываете среднюю цену за ночь для данного периода, сценарий поиска должен соответствовать массиву данных, предоставленных выше.
У меня такой вопрос: Как должен выглядеть мой запрос для быстрого расчета, если пользовательские данные соответствуют записям в базе данных .
Я думал об использовании функции SQL DATEDIFF и затем умножил нацена ... и т. д., но это выглядит для меня довольно сложно.
Буду признателен за любой совет.
Спасибо
ОБНОВЛЕНИЕ
Вот моя база данныхсхема:
Таблица "apt_search_periods", в которой хранятся все объединенные даты (непрерывные даты из таблицы доступности)
+-----------+------------+------------+-----------+--------------+--------+
| period_id | start_date | end_date | rental_id | nb_of_people | merged |
+-----------+------------+------------+-----------+--------------+--------+
| 21 | 2011-03-31 | 2012-03-31 | 548 | 4 | y |
+-----------+------------+------------+-----------+--------------+--------+
Таблица "apt_search_periods_avail", связывающая объединенные даты с таблицей доступности
+----+-----------+-----------------+
| id | period_id | availability_id |
+----+-----------+-----------------+
| 21 | 21 | 20953 |
| 22 | 21 | 20952 |
| 23 | 21 | 4033 |
+----+-----------+-----------------+
Таблица «Наличие» с расширенными датами и ценами
+-------+-----------+------------+------------+--------------+--------------+
| id | rental_id | start_date | end_date | nb_of_people | rent_per_day |
+-------+-----------+------------+------------+--------------+--------------+
| 20952 | 548 | 2011-03-31 | 2011-07-01 | 4 | 575 |
| 4033 | 548 | 2011-07-01 | 2011-09-01 | 4 | 680 |
| 20953 | 548 | 2011-09-01 | 2012-03-31 | 4 | 575 |
+-------+-----------+------------+------------+--------------+--------------+