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

 
Що таке сесії і для чого вони потрібні?
26.04.2007
Сесії - це механізм, створений для тимчасового зберігання і передачі інформації між скриптами в межах одного сайту ...
Блокування файлів
29.05.2007
"Warning! On most operation systems flock () is implemented at the process level. When using a multithreaded server API like ISAPI you cannot rely on flock () to protect files against other PHP scripts running in parallel threads of the same server instance!"
Блокування файлів
29.05.2007
"Warning! On most operation systems flock () is implemented at the process level. When using a multithreaded server API like ISAPI you cannot rely on flock () to protect files against other PHP scripts running in parallel threads of the same server instance!"

 

Rambler's Top100