|  Власне розбивка, точніше арифметика, 3-ий клас 
  <? php
 $ showperpage = 0;
 ff8000 "> / / скільки показувати на сторінку
 if (isset ($ HTTP_GET_VARS [ 'show'])) (
 0bb "> $ showperpage = (int) $ HTTP_POST_VARS [ 'show'];
 )
 if (isset ($ HTTP_POST_VARS 700 "> [ 'show'])) (
 $ showperpage = (int) $ HTTP_POST_VARS [ 'show'7700 ">];
 )
 
 / / Скільки показувати на сторінку за замовчуванням
 if (($ showperpage <1) | | ($ Showperpage> 100)) (
 $ showperpage = 20  )
 
 / / Скільки записів вийшло
 $ counted = mysql_num_rows (  color = "# 0000bb"> $ result);
 / / Скільки сторінок
 $ countedpages = ceil= "# 007700"> ($ counted / $ showperpage);
 
 / / Отримати з урл поточну сторінку
 $ currentpage = 0;
 if (isset ($ HTTP_GET_VARS [ 'page'  $ currentpage = (int) $ HTTP_GET_VARS [ 'page'];
 & nbsp;)
 if ($ currentpage> $ countedpages) (
 $ currentpage = $ countedpages;
 )
 if ($ currentpage <1 font>) (
 $ currentpage = 1;
 )
 
 / / перша позиція
 $ start_pos = ($ currentpage - 1) * $ showperpage # 007700 "> + 1;
 / / Остання позиція
 $ end_pos = $ start_pos +r = "# 0000bb"> $ showperpage - 1;
 if ($ end_pos> $ counted) (
 & nbsp; $ end_pos = $ counted;
 )
 ?>
 <p> Знайдено: <? = $ counted?> </ p>
 <? = $ currentpage?> з <? = $ countedpages?> </ p>
 <p> <? php
 / / Вивести сторінки для вибору
 & nbsp; for ($ i = 1; $ i <= $ countedpages; $ I + +) (
 if ($ currentpage! = $ i) (
 & nbsp; echo "<a href = " ". $ PHP_SELF."? show = ". $showperpage. "& page =". $ i. ""> ". $ i nt>. "</ a>";
 ) Else (
 echo $ i;
 )
   echo "";
 )
 
 ?> </ P>
 <? php
 if (! mysql_num_rows ($ result)) (
 echo "<p> За запитом нічого не знайдено </ p>";
 ) Else (
 & n bsp; $ i = $ start_pos;
 echo "<ol start = " "700 ">. $ I."  ">";
 / / Перейти на початкову позицію
 mysql_data_seek ($ result, $ i - 1) or echo "Could not seek to row ". ($ i - 1);
 / / Вивести знайдені результати до позиції $ end_pos
 while ($ row = mysql_fetch_array ($ result)) (
 & nb sp; if ($ i> $ end_pos) (
 break;
 )
 echo00 ">" <li> ". $ Row [ 'field1']." </ Li> ";
   $ i + +;
 )
 echo "</ ol>";
 )
 ?>
 <br />
 
 
  Ефективність Як бачите, в коді закладена не зовсім ефективна концепція. Спочатку ми повертаємо всі результати з SQL запиту, а потім робимо навігацію в отриманому результаті. З точки зору правильного підходу неефективно витягувати всі ст роки а потім виводити тільки потрібні. MySQL дозволяє ще на стадії написання SQL запиту обмежити результат тільки поточний сторінкою через інструкцію LIMIT. Наприклад щоб вивести 3-ю сторінку з 20 рядками досить написати
 
  000bb "> <? Php
 $ result = mysql_query ( "SELECT * FROM table WHERE .... LIMIT 40, 20");
 while($ Row = mysql_fetch_array ($ result)) (
 echo $ row ['field1'];
 )
 ?>
 
 
 але тоді виникає проблема підрахунку всіх сторінок. Як дізнатися скільки б повернув запит записів без обмеження LIMIT? Виходу два:
 
 Чи будуть ці варіанти ефективніше у вашому конкретному випадку вирішувати вам, досвідченім шляхом. Варіант з новим MySQL напевно буде краще, а варіант з окремим підрахунком буде прийнятний тільки у випадку нескладній вибірки WHERE по індексам. Останній варіант, для прикладу, реалізований у phpMyAdmin
 
 |