2013-11-11 4 views
-1

Я искал в Интернет о том, как сделать нумерацию страниц результатов поиска в PHP, и я вошел в посты, как это: http://php.about.com/od/phpwithmysql/ss/php_pagination.htmPHP результатов поиска нумерация страницы без выполнения запроса несколько раз

Всякий раз, когда другая страница из результатов спросил, запрос выполняется снова, и вещь, которая изменяется, является «пределом».

Но, что, если моя база данных очень большая, и я хочу избежать ее поиска каждый раз (используя что-то вроде select * from articles where HTML like '%dummy%' limit x, y)?

Насколько я понимаю, база данных будет искать себя каждый раз и будет возвращать разные результаты на основе x и y.

+0

Сохраните результаты в '$ _SESSION'? – putvande

+0

Нет, что doenst исправить его проблему :) проблема заключается в двойном выборе, не сохраняя фактические результаты (что также не требовало сеанса) – Martijn

ответ

1

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

Существует способ улучшить его, хотя, вам нужно только количество строк в 2 запроса:

// Query one, to select the actual content: 
Select * from articles where HTML like '%dummy%' LIMIT $start,$num_items 
// Query two, select an index column, preferable a small int column: 
Select id from articles where HTML like '%dummy%' 

я работал на интернет-магазин, а не самая большая база данных, но 3500 продуктов, с 1 до N изображений, от 1 до N классов и некоторых других очень больших таблиц (в количестве), и что работает отлично :)


вы можете сделать это в 1 запрос, если вы хотите. Просто выберите весь пучок и сделайте строки пропусков PHP до достижения start и сломайте цикл, когда вы достигнете своего limit. Однако для этого требуется намного больше времени (и ресурсов!), Чем повторение запроса. Если вы хотите улучшить скорость, убедитесь, что указана колонка html, которая сохранит много времени. Rememer, это (mysql-) базы данных производится для поиска быстро, PHP разве


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

+3

* sigh *, Если вы уменьшите, объясните, почему я могу улучшить ответ , – Martijn

+0

Я не был тем, кто остановился, но я действительно не понимаю вашу мысль здесь. Единственное, что я хочу для отображения моей страницы, - это общие результаты, соответствующие критериям поиска, самим результатам и элементам, которые я хочу иметь на странице. Я не понимаю, почему я должен выполнить 2 запроса, а также не вижу, как это отвечает на мой вопрос: как избежать повторного запуска запроса (который будет искать базу данных снова) на каждой странице, которую пользователь выбирает? – hakermania

+0

Редактируемый андер должен быть немного более ясным. – Martijn

Смежные вопросы