ru en uk

  авторизація

(044) 362 48 16   (098) 294 41 60



Власне розбивка, точніше арифметика, 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'];
& n
bsp;)
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) (
& nb
sp; $ end_pos = $ counted;
)
?>
<p> Знайдено: <? = $ counted?> </ p>
<? = $ currentpage?>
з <? = $ countedpages?> </ p>
<p> <? php
/ / Вивести сторінки для вибору
& nb
sp; for ($ i = 1; $ i <= $ countedpages; $ I + +) (
if ($ currentpage!
= $ i) (
& nb
sp; echo "<a href = " ". $ PHP_SELF."? show = ". $showperpage. "& page =". $ i. ""> ". $ i nt>. "</ a>";
) Else (
echo
$ i;
)
&
nbsp; 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;
)
echo
00 ">" <li> ". $ Row [ 'field1']." </ Li> ";
&
nbsp; $ 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> 4.0.x то зробити так:

    <? php
    $ sql
    = "SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE & n
    bsp ;..... LIMIT 0, 200 ";
    $ result = mysql_query ($ sql);
    ont> $ sql = "SELECT FOUND_ROWS ()";
    $ count_row = mysql_fetch_rowolor = "# 007700"> (mysql_query ($ sql));
    $ counted = $ count_row [0];
    ?>


  • Попередньо зробити SELECT COUNT (id) FROM table WHERE ...

Чи будуть ці варіанти ефективніше у вашому конкретному випадку вирішувати вам, досвідченім шляхом. Варіант з новим MySQL напевно буде краще, а варіант з окремим підрахунком буде прийнятний тільки у випадку нескладній вибірки WHERE по індексам. Останній варіант, для прикладу, реалізований у phpMyAdmin

 
Основи: HTTP Files Upload - закачування файлів на сервер через браузер
29.05.2007
Основи: HTTP Files Upload - закачування файлів на сервер через браузер
29.05.2007
Основи CGI
29.05.2007
Щоб зрозуміти як працює CGI створимо два примітивних прикладу, які запустимо на Віндовзе. Для початку переконаємося що Апач розуміє CGI, для цього знайдемо приблизно такі рядки, і якщо їх немає, то створимо ...