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

 
Введення в PHP5
29.05.2007
PHP5 ще офіційно не вийшов, але "робітники" версії вже працездатності (так само як і нестабільні!), Так що ми цілком можемо почати вивчення нових можливостей прийдешнього релізу PHP і попрактикуватися з ними. У цій статті ми поговоримо про три основних нововведення в PHP5
Основи безпеки
29.05.2007
Відразу скажемо що PHP і Апач в цій області далеко не просунулися. Нормальна багатокористувальницька конфігурація веб-сервера повинна працювати під різними користувачами ...
Як надіслати пошту
29.05.2007
Якщо Вам потрібно надіслати повідомлення адміністратору, користувачеві, зробити розсилку, відправити звіт електронною поштою, то простіше за все це зробити за допомогою вбудованої функції mail ()...

 

Rambler's Top100