2012-06-19 2 views
0

Мне нужно выбрать только 20 записей из таблицы, а затем добавить разбивку на страницы, чтобы показать 5 записей на странице. Я знаю, что существует использование LIMIT в разбивке на страницы, но сначала мне нужно получить 20 записей, а затем добавить разбивку на страницы для этих 20 записей.PHP Pagination Ограниченное количество записей, но не все

+0

Вы, ребята, неправильно понимаете проблему, которую я пытаюсь описать. Я не хочу знать, как сделать разбивку на страницы. Я знаю, как сделать разбивку на страницы. но я хочу сделать разбивку на страницы на последние 20 записей таблицы. помогите мне понять, как добиться этого, а не рассказывать мне, как делать разбивку на страницы. спасибо –

+0

Итак, я думаю, ваша проблема правильно отображает последние 20 записей таблицы? Ознакомьтесь с моим обновленным ответом ниже. – verisimilitude

ответ

1

Вы можете выбрать 20 записей за один раз, а затем использовать array_slice для разбивки на страницы.

Edit: Почему есть 2 ПРЕДЕЛЫ? Предельное значение должно быть следующим:

1st page: LIMIT 0, 5 
2nd page: LIMIT 5, 5 
3rd page: LIMIT 10, 5 
4th page: LIMIT 15, 5 
+0

Я хочу показать последние 20 последних добавленных книг. и хотите показать их по 5 на страницу. так что действительно есть 2 ПРЕДЕЛЫ. первый лимит, чтобы получить 20 записей, а затем добавить разбивку на страницы, чтобы показать 5 записей на странице. Я просто не знаю, как этого добиться. Я не хочу использовать срез массива –

+0

@KhawerZeshan Если вы не хотите использовать только один запрос, то в чем ваша проблема, это не просто нормальный лимит использования и смещение страницы? – xdazz

+0

Непонятно об источнике путаницы @KhawerZeshan. – verisimilitude

0

Используйте два запроса. Один, чтобы получить общее количество записей (он вернет только одну строку, содержащую счетчик). После этого используйте LIMIT для выбора разбивки на страницы.

1

Я дам вам общее представление о том, как это сделать.

1) Узнайте много много строк есть в таблице (Simple -

SELECT COUNT(*) 
In your case it is 20. 

2) Узнайте, сколько страниц вы хотите, чтобы показать, в зависимости от количества строк на странице вы хотите перейти для.

intPages = ceil(intTotalRecords/8) 

так что все плавающие точки будет CEIL()-й изд смыслом, если это деление приводит значение 9,5, то 10 будет рассматриваться как число страниц.

3) Узнайте текущую страницу, на которой вы находитесь. 4) Определите предел и смещение (в зависимости от номера страницы), которое будет отправлено по вашему запросу. Что-то в следующих строках.

intLimit = 8; 
intOffset = (intCurrentPage - 1) * intRowsPerPage; 

5) Вытяните строки для текущей страницы
6) Отображение информации. (ссылки на страницы и их чередование)

Необходимо проверить, прошло ли предыдущая/следующая страница 1 или максимальное количество страниц, которые вы имеете, и соответственно установить значение intCurrentPage.

ОБНОВЛЕНИЕ: Чтобы получить последние 20 блоков записей из вашего стола.

SELECT <column_names> FROM <table_name> 
<optional_where_clause_goes_here> 
ORDER BY <primary_autoincrement_id_field> DESC 
LIMIT 20; 

ИЛИ

SELECT <column_names> FROM <table_name> 
WHERE <certain_conditions_here> 
and <primary_autoincrement_id_field> >= (select max(<primary_autoincrement_id_field>) from <table_name>) - 20 

Там есть зависимость в каждом из приведенных выше запросов я опубликовал, который является поле <primary_autoincrement_id_field> должно быть auto_increment.

0

сначала получить общее количество из таблицы и вызвать эту функцию пагинацию она возвращает массив

$array = pagination(200000); 

и вы можете написать запрос, как

$query = "SELECT * FROM your_table ".$array['querylimit']; 

также вы можете использовать другую indexex массива для пагинации ,

function pagination($totalRows, $perPage = 20){ 
     $page = (isset($_POST['pagination']['page'])) ? intval($_POST['pagination']['page']) : 0; 


     $perPage = intval($perPage); 

     if($perPage == 0){ 
      $perPage = 20; 
     } 

     if(intval($page) < 0){ 
      $page = 1; 
     } 

     if (ceil($totalRows/$perPage) < intval($page)){ 
      $page = ceil($totalRows/$perPage); 
     } 

     if (!$page){ 
      $page = 1; 
     } 
     $prev = $page - 1; 
     $next = $page + 1; 


     if(intval($prev) < 0){ 
      $prev = 1; 
     } 


     $min = (($page - 1) * $perPage); 

     if(ceil($totalRows/$perPage) < $next){ 
      $next = 0; 
     } 

     $end = $min+$perPage; 
     if($end > $totalRows){ 
      $end = $totalRows; 
     } 
     $start = $min+1; 
     $return['showing'] = "$start-$end of $totalRows"; 
     $return['querylimit'] = " LIMIT $min, $perPage"; 
     $return['next'] = $next; 
     $return['prev'] = $prev; 
     return $return; 
    } 
Смежные вопросы