X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Нумерация. Готовый скрипт. [флуд]
Licoric
Licoric
Topic Starter сообщение 13.3.2013, 11:57; Ответить: Licoric
Сообщение #1


Иногда спрашивают за него. Вот.
Без плюшек и прочих радостей типа "не вывода" лишних страниц. Основной скелет, скажем так.
[PHP]
<?php
// всего записей (запрос)
$query_num = "SELECT id FROM table_name";
$res_num = mysql_query($query_num) or die(mysql_error());
// всего записей
$num = mysql_num_rows($res_num);
// записей на страницу
$per_page = 5;
// количество страниц
$page = ceil($num / $per_page);
// текущаю страница
$current_page = preg_replace("/[^0-9]+/", "", $_GET['page']);
if (!$current_page) {$current_page = 1;}
// высчитываем limit
$limit = ($current_page - 1) * $per_page;
if ($limit < 0) {$limit = 0;}
// Запрос с учетом текущей страницы
$query = "SELECT * FROM table_name order by `id` desc limit ".$limit.", ".$per_page;
$res = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($res))
{
$id = $row['id'];
// вывод данных
}
// Выводим нумерацию
for ($i = 1; $i <= $page; $i++)
{
if ($current_page == $i)
{
echo $i." ";
}
else
{
echo "<a href=\"?page=".$i."\">".$i."</a> ";
}
}
?>[/PHP]
Флуд приветствуется.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
A1ex_hb
A1ex_hb
сообщение 13.3.2013, 21:00; Ответить: A1ex_hb
Сообщение #2


так будет быстрее:
[PHP]$current_page = (int) $_GET['page'];[/PHP]


Да и лучше mysqli или pdo заюзать
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 13.3.2013, 21:26; Ответить: Licoric
Сообщение #3


я сторонюсь универсальных скриптов. На вырост, скажем так. Инт не пропустит большие цифры. Из 10 чисел, например.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 13.3.2013, 21:28; Ответить: Den1xxx
Сообщение #4


(A1ex_hb @ 14.3.2013, 00:00) *
Да и лучше mysqli или pdo заюзать

Кому лучше? Придираетесь. У меня например другой фреймворк, но с нативными функциями-то лучше разбираться.
По коду.
пагинация д.б. функцией, и БД там вообще ни при чем.

Вот из движка функция:
[PHP]
function rcms_pagination($total, $perpage, $current, $link){
$return = '';
$link = preg_replace("/((&amp;|&)page=(\d*))/", '', $link);
if(!empty($perpage)) {
$pages = ceil($total/$perpage);
if($pages != 1){
$c = 1;
while($c <= $pages){
if($c != $current) $return .= ' [' . '<a href="' . $link . '&amp;page=' . $c . '">' . $c . '</a>] ';
else $return .= ' [' . $c . '] ';
$c++;
}
}
}
return $return;
}
[/PHP]
Выводит просто [1][2][3]
Текущая не ссылкой, остальные ссылками.
На входе: всего, сколько на странице, текущая страница и код ссылки.
Потом уже прикручивается к каждому из модулей где надо пагинация:
[PHP] $cur=$from-1;
$tcount=fn_get_article_count_category($category_id);
$query='SELECT * from `articles` WHERE `category`="'.$category_id.'" ORDER BY `date` DESC LIMIT '.($cur)*$perpage.','.$perpage.'';
$allarticles=simple_queryall($query);
if (!empty ($allarticles)) {
$link='?module=fn&c='.$container.'&b='.$category_id.'';
$result.=rcms_pagination($tcount,$perpage, $from, $link).'<br />';
}
[/PHP]
Мало где понадобится? В статьях, форуме, галерее...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
A1ex_hb
A1ex_hb
сообщение 13.3.2013, 21:32; Ответить: A1ex_hb
Сообщение #5


(Den1xxx @ 14.3.2013, 00:28) *
Придираетесь.


Ни в коем случае =)
Возможно, в следующих версиях php эти функции не будут поддерживаться.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 13.3.2013, 23:12; Ответить: Arks
Сообщение #6


1. СЕЛЕКТ
2. SQL_CALC_FOUND_ROWS
3. ФРОМ
4. блаблабла(вские ДЖОЙН и т.п.)
5. ГРУП БАЙ <ФРОМ>.первичный ключ
6. ЛИМИТ <с какой записи>,<сколько записей>
7. ;
8. СЕЛЕКТ
9. FOUND_ROWS()
10. ;

Почему столь подробно объясняю и на русском - потому что автор судя по этому коду
[PHP]
$query_num = "SELECT id FROM table_name";
$res_num = mysql_query($query_num) or die(mysql_error());
// всего записей
$num = mysql_num_rows($res_num);
[/PHP]
Даже не подозревает об агреггирующей функции COUNT(), уже не говоря о том что при выборке всей таблице для MyISAM вообще достаточно будет получить 1 давно готовое значение из свойств таблицы. А значит производительность будет в 1000 раз выше.
В общем печалька :zloy:
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Galen
Galen
сообщение 14.3.2013, 0:11; Ответить: Galen
Сообщение #7


Arks, сказал вроде бы умную и полезную вещь, под неё бы ещё пример понятный (ну чтобы не гуглить лишний раз).
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 14.3.2013, 0:26; Ответить: Licoric
Сообщение #8


я не говорил, что это идеальный код. Мерять достоинство тоже тут смысла нет. Тыкать меня в то, чего я, например, не знаю - смысла нет. Я не на олимпиаду код пишу. Выигрывать наносекунды смысла нет. Везде прошли 90е и динозавры канули. Если этот код будет выполняться на пол секунды дольше, то это тоже не страшно. Страшно строить диалог не как "смотри как еще можно - давай покажу/научу", а как "ты ничего не умеешь и ничего не знаешь. И вообще - в поиск".
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 14.3.2013, 0:51; Ответить: Arks
Сообщение #9


Galen,
Licoric,
Это все конечно замечательно, но пример чтобы сделать мне надо потратить часа полтора своего времени, сделать тестовую БД из пары миллионов разных строк, оформить все это в виде структуры БД и представить код с точки зрения разницы в производительности разных решений.
Я пишу так вовсе не потому что это "в поиск", а потому что писать это специально реально долго, а в поиске это уже освещено. Я лишь представил концепцию. и указал на явные ошибки.

(Licoric @ 14.3.2013, 03:26) *
Выигрывать наносекунды смысла нет.

Чушь полнейшая. В подобных запросах речь идет далеко не о наносекундах.
Нет, может она идет на уровне сотых секунды когда нет джойнов. Но с (особенно left) джойнами время выполнения подобных запросов растет почти в геометрической прогрессии с каждым джойном.

P.S.
Тыкать меня в то, чего я, например, не знаю - смысла нет
Тут то как раз смысл есть, даже если Вы не оценили. Было бы странно тыкать в то, что Вы знаете - кретинизмом вероятно.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Licoric
Licoric
Topic Starter сообщение 14.3.2013, 1:25; Ответить: Licoric
Сообщение #10


(Arks @ 14.3.2013, 03:51) *
Galen,
Licoric,
Это все конечно замечательно, но пример чтобы сделать мне надо потратить часа полтора своего времени, сделать тестовую БД из пары миллионов разных строк, оформить все это в виде структуры БД и представить код с точки зрения разницы в производительности разных решений.
Я пишу так вовсе не потому что это "в поиск", а потому что писать это специально реально долго, а в поиске это уже освещено. Я лишь представил концепцию. и указал на явные ошибки.


Чушь полнейшая. В подобных запросах речь идет далеко не о наносекундах.
Нет, может она идет на уровне сотых секунды когда нет джойнов. Но с (особенно left) джойнами время выполнения подобных запросов растет почти в геометрической прогрессии с каждым джойном.

P.S.
Тут то как раз смысл есть, даже если Вы не оценили. Было бы странно тыкать в то, что Вы знаете - кретинизмом вероятно.


Какие еще тут джойны? 2 запроса - один с количеством строк, второй - выхлоп математики. Не надо городить велосипед там, где мне надо выводить статическую страницу.

Повторюсь, может быть, излишними цитатами, но...
(Licoric @ 14.3.2013, 03:26) *
Страшно строить диалог не как "смотри как еще можно - давай покажу/научу", а как "ты ничего не умеешь и ничего не знаешь. И вообще - в поиск".


(Arks @ 14.3.2013, 02:12) *
Почему столь подробно объясняю и на русском - потому что автор судя по этому коду

[...]
(Arks @ 14.3.2013, 02:12) *
Даже не подозревает об агреггирующей функции COUNT()

Не тыкал?)))
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПродажа готовый статей по тематике строительство и ремонт
от 10 рублей за статью. Можно заказать статьи по вашей тематике
2 projectadmin 1387 25.10.2023, 10:58
автор: projectadmin
Открытая тема (нет новых ответов) Скрипт поисковика видео StrongTube
3 3josoft 1574 14.8.2023, 14:45
автор: 3josoft
Открытая тема (нет новых ответов) Скрипт приема платежей p2p с карты на карту card2card
Скрипт приема платежей p2p с карты на карту card2card
15 zladey1986 7830 26.3.2023, 8:54
автор: Palundra
Открытая тема (нет новых ответов) Продам готовый бизнес с доходом
пассивный доход/онлайн игры
3 MetalMessiah 823 1.2.2023, 9:43
автор: Skyworker
Открытая тема (нет новых ответов) Продам скрипт перевода постов и комментариев
4 Tutich 784 19.1.2023, 17:23
автор: Tutich


 



RSS Текстовая версия Сейчас: 18.4.2024, 5:58
Дизайн