Постраничный вывод составных запросов

alpes

Весь мир на ладони
Постраничный вывод составных запросов

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

В силу того что не малый запрос нужно будет повторять по сути дважды для каждой страницы (порции данных). Дважды потому что:
сначала подсчитать COUNT записей удовлетворяющих выборке для отображения количества страниц и ссылок на них;
затем в зависимости от запрошенной страницы выбирать через LIMIT нужную порцию данных.
Смущает то, что база не маленькая и для каждой страницы нужно заново запускать такие ресурсоемкие задачи.

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

В связи с этим вопрос: насколько будет правильный такой подхот?
А также куда лучше запихнуть такой массив ключей: прямо массивом в сессию? Или в силу того что ключей может быть очень много, например не один фильтр не выбран, сериализовать его в ячейку отведенной для этих целей таблицы, ну а в сессии передавать всего ссылку на эту запись?
 

clevel

Новичок
я использую специальную таблицу для результатов поиска, структура следующая:
- search_id
- page_id
- ordinal
И при выполнении запроса складываю туда записи результатов поиска search_id. Плюс этому - всегда из админки можно посмотреть, какие страницы были выданы на каждый запрос.
В отдельной таблице храню свляства запроса:
- search_id
- query
- num_find
И не таскаю в запросе сами поисковые фразы...
 

alpes

Весь мир на ладони
Спасибки за подтверждение.
Я только собираюсь использовать одну таблицу с такой структурой:
- search_id
- search_datetime
- page_count
- array_key
Ну а дальше к записи array_key применить explode и в зависимости от запрошенной страницы выбор соответствующей порции ключей для выборки по ним и вывода данных.
Саму же таблицу чистить по крону (search_datetime).
 
Сверху