Как выполнить контроль страницы? - PullRequest
0 голосов
/ 14 ноября 2008

Я имею в виду, какой самый эффективный способ получить информацию о количестве элементов вашей страницы и сделать SQL-запрос с LIMIT, который вам нужен. или я должен получить все элементы и затем обрезать массив с помощью функций php?

теперь я делаю 2 запроса: сначала посчитать все элементы, а затем получить нужные мне элементы с помощью LIMIT.

Хорошо, я буду более конкретным. Например, мне нужно показать вопрос на моей странице и 20 ответов на этот вопрос. Внизу должен быть контроль страницы: ссылки на следующую, предыдущую страницу и так далее. Я хочу показать правильное количество ссылок (количество ответов / 20), и когда я перехожу на любую ссылку, я хочу получить правильные ответы (например, с 41 по 60 на 3-й странице). Итак, как лучше всего получить количество элементов (ответов), чтобы показать правильное количество ссылок и получить правильные ответы для каждой ссылки?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2008

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

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

Во всяком случае, я знаю Я хотел бы знать, как все работает, вот как это обычно происходит:

Насколько мне известно, код нумерации страниц вычисляет страницы, выполняя один запрос, используя select count(*) from tblX where something, делите это число на количество элементов на страницу и используйте потолок (например, 4.1 => 5).

Для отображения результатов на странице требуется новый запрос; не волнуйтесь, запрос подсчета ужасно намного быстрее, чем получение каждого результата, отбрасывающего те, которые вам не нужны *). Что-то вроде select * from tblX where something limit Y offset Z, где Y - количество элементов на странице, а Z - (requested_page - 1)*Y; страница 1 будет иметь смещение 0, страница 2 будет иметь смещение 20 (если это то, что Y) и т. д.

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

1 голос
/ 14 ноября 2008

Я предполагаю, что вы хотите подсчитать количество строк, которые вы будете читать, чтобы выполнить нумерацию страниц или что-то подобное? Я не понимаю вашу потребность в LIMIT в контексте вашего вопроса. Однако, если вы просто хотите подсчитать, сколько строк было найдено, воспользуйтесь одним из следующих.

Вы выбираете количество всех строк, таких как:

select count(*) as counted, name, address
from contact

Или найденные строки:

SELECT SQL_CALC_FOUND_ROWS, name, address
from contact

Это может быть специфично для mysql, я не уверен.

Обновление:

Для нумерации страниц вы должны сделать что-то вроде следующего - (Psuedocode)

$ row = array ($ result)
$ num_rows = sql_calc_found_rows
$ per_page = 20
$ pages = ceil ($ num_rows / $ per_page)

страница
$ row_this_page = array ()
$ row_this_page = get_values ​​($ row, (минимальный индекс) $ page_number * $ per_page - $ per_page, (максимальный индекс) $ page_number * $ per_page - 1)

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