Власне розбивка, точніше арифметика, 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               |