Алгоритм: как организовать поиск в базе данных по нескольким параметрам? - PullRequest
0 голосов
/ 10 мая 2011

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

Это пример данных:

House is available for rent in these two date ranges: 

[0] => Array
(
  [start_date] => 2011-01-01
  [end_date] => 2011-03-31
  [nb_of_people] => 6
  [price_per_night] => 100
)

[1] => Array
(
  [start_date] => 2011-04-01
  [end_date] => 2011-04-30
  [nb_of_people] => 7
  [price_per_night] => 110
)

Я подготовил скрипт, который объединяет непрерывные / перекрывающиеся даты в одну запись в БД, поэтому результат будет выглядеть следующим образом:

(
  [start_date] => 2011-01-01
  [end_date] => 2011-04-30
  [availability_ids] => 0;1
)

ОБНОВЛЕНО:

расчеты не были ясны, поэтому я обновил сообщение:

Допустим, пользователь искал дом:

даты: с 2011-03-28 по 2011-04-08, для 6 человек, и он готов тратить от 90 до 108 долларов за ночь.

Это мое руководстворасчеты для этого поиска:

  1. даты соответствуют нашему объединенному интервалу дат
  2. общее количество дат, которые пользователь хочет остаться: 11 дней
  3. цена запервый период с 2011-03-28 по 2011-03-31 - 3 дня * 100 долларов США = 300
  4. цена за второй период с 2011-04-01 по 2011-04-08 - 8 дней * 110 долларов США = 880 * 1033 долларов США *
  5. общая средняя цена за ночь = 300 + 880/11 = $ 107,27
  6. цена и количество людей соответствуют вводу пользователя, поэтому мы показываем этот дом

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

Мой вопрос таков: как бы вы организовали данные вбазы данных и как должен выглядеть алгоритм поискового скрипта для мгновенного получения результатов из базы данных.

PS Я в порядке, чтобы запускать задание cron для ежедневной реорганизации данных при необходимости.

Спасибо за любые советы.

1 Ответ

0 голосов
/ 10 мая 2011

У вас на руках довольно сложная проблема.

Вы предполагаете, что с клиентами все в порядке с переключением в середине их пребывания. Они могут не хотеть. В вашем примере они движутся. Вы спросили их, все ли в порядке?

Вы также можете предполагать, что они в порядке, если живут в отдельных домах. Хорошо ли два дома с 3-мя местами, или они хотят один дом, где все могут жить вместе? Они живут вместе с людьми, которых не знают?

Я бы посмотрел на ваши предположения (это были лишь некоторые примеры; я уверен, что их больше) и подумал, хотите ли вы смешать их предпочтения. Тогда это приведет вас к тому, как вы комбинируете результаты запроса - или, что более важно, к тому, как вы их не комбинируете.

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