Как туристические сайты осуществляют сортировку результатов поиска? - PullRequest
1 голос
/ 19 декабря 2011

Например, вы выполняете поиск отеля в Лондоне и получаете 250 отелей, из которых 25 показаны на первой странице. На каждой странице пользователь имеет возможность сортировать отели по цене, названию, отзывам пользователей и т. Д. Теперь разумным решением будет получить только первые 25 отелей на первой странице из базы данных. Когда пользователь перейдет на страницу 2, сделайте еще один запрос к базе данных для следующих 25 отелей и сохраните предыдущие результаты в кэше.

Теперь учтите, что пользователь находится на странице 1 и видит 25 отелей, отсортированных по цене, и теперь он сортирует их по рейтингу пользователей. В этом случае мы должны хранить в кэше отели, которые мы уже получили, и запрашивать только дополнительные отели. , Как это реализовано? Есть ли что-то построенное на каком-либо языке (желательно php) или мы должны реализовать его с нуля, используя несколько запросов?

1 Ответ

0 голосов
/ 19 декабря 2011

Обычно это делается следующим образом:

Запрос выполняется с order by обязательным полем и с top (в некоторых базах данных limit), установленным на (page_index + 1) * entries_per_page результаты.Запрос возвращает набор строк с произвольным доступом (вы также можете услышать об этом как о наборе результатов или наборе записей в зависимости от используемой вами библиотеки базы данных), который поддерживает такие методы, как MoveTo( row_index ) и MoveNext().Итак, мы выполняем MoveTo( page_index * entries_per_page ), а затем читаем и отображаем entries_per_page результаты.Набор строк, как правило, также предлагает свойство Count, которое мы вызываем, чтобы получить общее количество строк, которые будут извлечены запросом, если мы когда-нибудь позволим ему выполнить его до конца (что, конечно, нет), чтобы мы могли вычислитьи покажите пользователю, сколько страниц существует.

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