2013-07-25 2 views
3

Каков минимальный размер разбивки на страницы в PHP/MySQLi? Я искал в Интернете и пытался узнать, как делать разбиение на страницы, но все примеры огромны, поэтому мне было интересно, насколько минимальны, поэтому я могу начать там, а затем поработать над тем, чтобы понять их. Заранее спасибо.Bare Minimum of Pagination?

Места, которые я предпринял (примеры не все, на что я смотрел); https://github.com/BenGriffiths/pdo-mysqli-pagination; http://bluedogwebservices.com/php-pagination-with-mysqli/;

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

+0

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

+0

Я добавил два примера, на которые я смотрел. – user2565624

ответ

2

Pagination - это относительно просто, и я попытаюсь описать его самым простым способом.

Чтобы начать с здесь 5 термины или фразы (или параметры), которые вы столкнетесь в большинстве сценариев постраничной:

  • Limit (или результатов на странице)
  • Offset (где, чтобы начать набор результатов/записей с)
  • Текущая страница
  • Всего результатов
  • Количество страниц

Возьмем пример запроса ниже:

SELECT * FROM products WHERE active = 1 LIMIT 0 , 25 

В SQL выше (он должен работать на MySQLi):

  • 25 => Является ли предел (или результатов на странице)
  • 0 => Смещение (т.е.е начинаются от результата или записи 0)

, который переводит в,

give me the results 0 - 24, i.e. the first 25 results 

Таким образом, если предположить, что у вас есть таблица продуктов с 1000 записей и вам необходимо, чтобы отобразить их на веб-странице только показывает 25 записей на странице: Находясь на первой странице это будет значение из 5 условий, описанных выше:

  • Limit (результаты на одной странице) => 25
  • смещение => 0
  • Текущая страница => 1
  • Всего результатов => 1000
  • Количество страниц => Итоговые результаты/предел => 40

Обычно смещение вычисляется динамически на основе текущей страницы и ограничения , поэтому для страницы 1 результатов вашего продукта, смещение будет равно:

offset = (current page * limit) - limit 
i.e. (1 * 25) - 25 = 0 

так что ваш MySQLi запрос будет:

SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT] 

i.e. SELECT * FROM products WHERE active = 1 LIMIT 0 , 25 

Используя тот же принцип для стр.2 результатов ваших продуктов, смещение (или начало результатов) будет:

offset = (current page * limit) - limit 
i.e. (2 * 25) - 25 = 25 

так что ваш MySQLi запрос будет:

SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT] 

i.e. SELECT * FROM products WHERE active = 1 LIMIT 25 , 25 

, который переводит в,

give me the results 25 - 49, i.e. the next 25 results starting from record 25 

другие термины будут иметь следующие значения:

  • Limit (или результатов на странице) => 25
  • Текущая страница => 2
  • Всего результатов => 1000
  • Количество страниц => 40

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

Я надеюсь, что приведенное выше объяснение помогло вам дать вам базовое представление о разбиении на страницы.

+0

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

+0

Нет проблем.Рад, что смог помочь... – newbie

-2

Мы будем использовать информацию о странице из сценария $ _GET.

<? 
if(isset($_GET['page'])) { 
$page = htmlspecialchars(mysql_real_escape_string($_GET['page'])); 
} 
else { 
$page = 1; //We'll assume that if the $_GET isn't present, the first page will be shown. 
} 
$perpage = 25; //Number of items per page 
$first = (($page-1)*$perpage); //Basically gets the first row of the page. 
$q = mysql_query("SELECT * FROM table ORDER BY id ASC LIMIT $first, $perpage"); 
while($row = mysql_fetch_array($q)) { 
//Put your output here 
} 

//Now, we can put our page navigator 

$i = 1; 
$count = mysql_num_rows(mysql_query("SELECT `id` FROM table")); 
$num = ceil($count/$perpage); 
while($i <= $num) { 
echo "<a href='/page/".$i."'>".$i."</a> "; 
$i++; 
?> 
+0

Почему каждый использует MySQL? Я думал, что это обесценилось? И я действительно сказал MySQLI, поэтому, пожалуйста, не ставьте ответ MySQL, спасибо. И спасибо за попытку помочь мне. – user2565624

3

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

Как вы увидите ниже, операции с базой данных занимают всего 2 вызова, используя safeMysql abstraction library (хотя вы можете использовать все, что захотите).
Из базы данных нам понадобятся сами данные и общее количество записей.

Для того, чтобы получить эти, мы будем использовать две функции MySQL:

  • SQL_CALC_FOUND_ROWS/FOUND_ROWS(), чтобы получить общее количество строк
  • LIMIT положение, чтобы ограничить количество выбранных данных,

Чтобы отобразить ссылки на страницы, вам необходимо знать текущую страницу и общее количество страниц.

<?php 
include 'safemysql.class.php'; 
$db = new safeMysql(); 

$per_page = 10; 

//let's get the page number 
$cur_page = 1; 
if (isset($_GET['page']) && $_GET['page'] > 0) 
{ 
    $cur_page = $_GET['page']; 
} 

// then define starting record 
$start = ($cur_page - 1) * $per_page; 

//now let's get the data and total number of rows 
$sql = "SELECT SQL_CALC_FOUND_ROWS * FROM Board LIMIT ?i, ?i"; 
$data = $db->getAll($sql, $start, $per_page); 
$rows = $db->getOne("SELECT FOUND_ROWS()"); 

//and total number of pages. 
$num_pages = ceil($rows/$per_page); 

//we have to define this variable to display list of pages 
$page = 0; 
include 'template.tpl.php'; 

Теперь, как только у нас есть все наши данные готовы, мы можем позволить его, используя родную PHP как шаблона:

Records found: <b><?=$rows?></b><br><br> 
<? foreach ($data as $row): ?> 
    <?=++$start?>. 
    <a href="?id=<?=$row['id']?>"> 
     <?=$row['title']?> 
    </a> 
    <br> 
<? endforeach ?> 

<br> 
Pages: 
<? while ($page++ < $num_pages): ?> 
    <? if ($page == $cur_page): ?> 
     <b><?=$page?></b> 
    <? else: ?> 
     <a href="?page=<?=$page?>"><?=$page?></a> 
    <? endif ?> 
<? endwhile ?> 

Однако, это действительно голый минимум, в том числе нет таких существенных деталей, как сокращение количества отображаемых страниц и поддержка дополнительных параметров WHERE.