Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 7
1

php/mysql - постраничное разбиение

25.03.2011, 02:42. Показов 4876. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
короче, вот в чём дело
есть код, который берёт записи с мускула, элементарно простой
записи выдаются все, все сразу, без растасовки на страницы, а-ля (пред 1 2 3 ... след), что очень плохо
никак не получается сделать этот самый 'pagination', сколько не читал, не получается
пхп и я - совершенно разные веСЧи =)
может поможет кто? нужно по страницам разбить всё выдающееся
код здесь - _http://paste.phpfi.com/45990

просьба не говорить, что нужно прочесть, так как я в этом ничего не смыслю
в надежде получить скорый ответ =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2011, 02:42
Ответы с готовыми решениями:

Постраничное разбиение страницы
$result = mysqli_query($bd, "SELECT * FROM `php` ORDER BY id DESC LIMIT 10"); $myrow =...

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\php\mysql.php on line 16
Не могу подключиться к базе...устал все перепроверять переписывать и пересоздавать... Я недавно...

Постраничное разбиение большого объема текста PHP+MYSQL
Доброго времени суток. В БД хранится множество статей разного объема. При просмотре любая статья...

Постраничное разбиение
Привет,подскажите как реализовать в java постраничное разбиение,допустим имеется String line,он...

31
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
25.03.2011, 11:13 2
в sql запросе нужно использовать limit $start,$length
где $start- с какой записи, $length - количество записей
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 7
26.03.2011, 00:24  [ТС] 3
я всё понимаю, читал про это очень много, не понимаю
может ктото попробует и покажет что выходит из всего этого, если может, конечно же
спасибо
0
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 34
27.03.2011, 15:44 4
допустим переменная $pg_num -номер страницы, а $in_pg - сколько результатов выводить на странице
PHP
1
2
3
4
5
6
$a = $pg_num * $in_pg;
$sql = '
SELECT id
FROM my_table
LIMIT '.$a.', '.$in_pg.'
';
это самый простой пример... надо ещё добавить кусок, который получает сколько всего результатов и короый просчитывает сколько страниц...
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 7
28.03.2011, 05:40  [ТС] 5
уважаемый jado,
не могли бы Вы показать всё на данном скрипте, потому как я не знаю что куда вписывать...
безумно благодарен
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
28.03.2011, 11:00 6
мы подождём пока уважаемый jado покажет пример!
если у него что-то не получится, я обызательно покажу как это делаю я.
0
freem
28.03.2011, 13:25 7
2 sl_play:
Вот всё ты любишь выябнуться...скромнее надо быть =||
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 34
28.03.2011, 13:51 8
у мя на сайте поисковик и как раз результаты делятся на страныцы.
вот код.
$s_name это текст писка

[code]
$mod_opt['sub_page'] = $_REQUEST['sp'];
if($mod_opt['sub_page']==''){
$mod_opt['sub_page'] = 0;
}

$where_sql = '
deleted = 0 AND
(
MATCH(name) AGAINST(''.$s_name.'' IN BOOLEAN MODE)
OR
MATCH(name_aliases) AGAINST(''.$s_name.'' IN BOOLEAN MODE)
)
';

$count_sql = '
SELECT
COUNT(id) as cou
FROM
clubs
WHERE
'.$where_sql ;

$result = mysql_query($count_sql);
if($result){
if(mysql_num_rows($result)>0){
$row = mysql_fetch_object($result);
$mod_opt['results'] = $row->cou;
}else{
$mod_opt['cont'] = false;
$errors[count($errors)] = 'Ïðîèçîøëà îøèáêà âûïîëíåíåíèÿ ñöåíàðèÿ...';
send_err('', 'Èìÿ ìîäóëÿ:'.$module_name.'
Ôàéë ìîäóëÿ:'.$module_filename.'
Íåâåðíûé ðåçóëüòàò âûïîëíåíèÿ SQL: '.$sql);
}
mysql_free_result($result);
}else{
$mod_opt['cont'] = false;
$errors[count($errors)] = 'Ïðîèçîøëà îøèáêà îáðàùåíèÿ ê ñåðâåðó... Ïîïðîáóéòå ïîçæå...';
send_err(mysql_error(), 'Èìÿ ìîäóëÿ:'.$module_name.'
Ôàéë ìîäóëÿ:'.$module_filename.'
Íåâîçìîæíî âûïîëíèòü ñëåäóþùèé SQL: '.$sql);
}

if($mod_opt['cont']){
if($mod_opt['results']==0){
$mod_opt['pages'] = 0;
}else{
$mod_opt['pages'] = ceil($mod_opt['results'] / $mod_opt['res_in_page']);
}

if($mod_opt['pages']>0){
if($mod_opt['sub_page']<$mod_opt['pages']){
$mod_opt['sql_param_1'] = $mod_opt['sub_page'] * $mod_opt['res_in_page'];
$limit_sql = '
LIMIT '.$mod_opt['sql_param_1'].', '.$mod_opt['res_in_page'].'
';
}else{
$mod_o
0
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 34
28.03.2011, 13:52 9
сори, что написано в таком формате, просто нет времени переписывать
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 7
28.03.2011, 14:24  [ТС] 10
скриптов, которые делят, и у меня не мало, только везде по разному как то.
phpfaq.ru/paginator
таких примеров, как показали в инете - пруд пруди...
а вот на данном показать всё не всякий сможет
0
4 / 4 / 3
Регистрация: 25.05.2009
Сообщений: 2,576
28.03.2011, 14:52 11
дайте конкретный скл запрос
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
28.03.2011, 18:58 12
Ненадолго забежал на форум, времени нету, вот вырезал кое-что со своих страрых сайтов и прилепил к твоему коду. Надеюсь ниче не забыл..
[code]
<?
include('common.php');

function replace_param($par, $path, $val)
{
$mas=array();
$hash=strstr($path,'#');
$path=str_replace($hash,'',$path);
$mas=explode($par.'=',$path);
$start=$mas[0];
$end=$mas[1];
$end=strstr($end,'&');
$end=substr($end,1);
$str=$start.$end;
$t=strstr($str,'?');
$ch='?';
if(strlen($t)>1)
$ch='&';
if(!strcmp(substr($start,-1,1),'&'))
$ch='';
if(strlen($t)==1)
$ch='';

return $str.$ch.$par.'='.$val.$hash;
}
function draw_pagelist($par, $pn, $path, $sinl_num=4)
{

$retstr='<table width='100%'><tr><td align='center'>'

$page=$_GET[$par];
$st='<a class='link' href=''.replace_param($par,$path, 0).''>[1]</a> '
$fn='<a class='link' href=''.replace_param($par,$path, $pn).''>['.($pn+1).']</a> '
$low=$page-$sinl_num;
if($low<=0)
{
$low=0;
$st='';
}
$hi=$page+$sinl_num;
if($hi>=$pn)
{
$fn='';
$hi=$pn;
}
if($low>1)
$st=$st.'... ';
$retstr.=$st;
if($hi<($pn-1))
$fn='... '.$fn;

for($i=$low;$i<=$hi;$i++)
{
if($i!=$page)
$retstr.='<a class='link' href=''.replace_param($par,$path, $i).''>['.($i+1).']</a> '
else
$retstr.='<font class='txt'><b>['.($i+1).']</b></font> '
}
$retstr.= $fn.'</td></tr></table>'
echo $retstr;
}

////////////////////////////
$res = mysql_query('SELECT * FROM cats WHERE id=$id');
$_NUM_AT_PAGE=10;
//// $_NUM_AT_PAGE - количество элементов на странице

$num=mysql_num_rows($res);
$pn=$num/$_NUM_AT_PAGE;
settype($pn,'integer');
if(($pn*$_NUM_AT_PAGE)==$num)
$pn--;
$page=$_GET['page'];
if($page>$pn)
$page=0;
$lim=' limit '.($page*$_NUM_AT_PAGE).','.$_NUM_AT_PAGE;
$q.=$lim;
$res=mysql_query($q);

draw_pagelist('page', $pn, $_SERVER['REQUEST_URI']);
$cat = mysql_fetch_object($qr1);

?>
<?
$qr1 = mysql_query('SELECT * FROM games WHERE cat=$id AND status=1');
while( $row = mysql_fetch_object($qr1) ){
?>
<table width=100%>
<tr>
<td align=left width=25%>
<a href='<?=$siteurl?>/games.php?id=<?=$row->id?>' class='nav'><img src='<?=$siteurl?>/uploads/thumb/<?=$row->thumb?>' border=0 width='70' height='59'></a>
</td>
<td align=left><div align=left>
<strong><a href='<?=$siteurl?>/games.php?id=<?=$row->id?>' class='nav'><?=stripslashes($row->name)?></a></strong>

<
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 7
29.03.2011, 09:39  [ТС] 13
опробовал
страница открылась полностью, без 'лимита' и рассортировки на страницы, код не сработал
спасибо в любом случае
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
29.03.2011, 12:16 14
Упс, я завтыкал=)
Код
////////////////////////////  
$res = mysql_query('SELECT * FROM cats WHERE id=$id');  $_NUM_AT_PAGE=10;  //// $_NUM_AT_PAGE - количество элементов на странице  
$num=mysql_num_rows($res);  
$pn=$num/$_NUM_AT_PAGE;  
settype($pn,'integer');  
if(($pn*$_NUM_AT_PAGE)==$num)
   $pn--;   
$page=$_GET['page'];   
if($page>$pn)
   $page=0;   
$lim=' limit '.($page*$_NUM_AT_PAGE).','.$_NUM_AT_PAGE;   
$q.=$lim;   
$res=mysql_query($q);  
draw_pagelist('page', $pn, $_SERVER['REQUEST_URI']);  
$cat = mysql_fetch_object($qr1);
?>
<?    $qr1 = mysql_query('SELECT * FROM games WHERE cat=$id AND status=1');
Надо поменть на 
////////////////////////////  
$qr1 = mysql_query('SELECT * FROM cats WHERE id=$id');
$cat = mysql_fetch_object($qr1);

$res = mysql_query('SELECT * FROM games WHERE cat=$id AND status=1');
$_NUM_AT_PAGE=10;  //// $_NUM_AT_PAGE - количество элементов на странице  
$num=mysql_num_rows($res);  
$pn=$num/$_NUM_AT_PAGE;  
settype($pn,'integer');  
if(($pn*$_NUM_AT_PAGE)==$num)
   $pn--;   
$page=$_GET['page'];   
if($page>$pn)
   $page=0;   
$lim=' limit '.($page*$_NUM_AT_PAGE).','.$_NUM_AT_PAGE;   
$q.=$lim;   
$res=mysql_query($q);  
draw_pagelist('page', $pn, $_SERVER['REQUEST_URI']);  
$cat = mysql_fetch_object($qr1);
?>
<?
Я просто не увидел, что там 2 запроса. И назначение перовго, если честно для меня зададка=)
0
0 / 0 / 0
Регистрация: 25.03.2011
Сообщений: 7
29.03.2011, 14:57  [ТС] 15
уважаемый,
у меня чтото вот такое вылезло:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /path/cats2.php on line 1
p.s. и ещё, бооооольшая просьба, коды вписывать вот сюда: http://paste.phpfi.com/

невероятно огромное спасибо за оказанную помощь
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
29.03.2011, 15:08 16
ХМ, а ты сам че исходник вообще не смотришь, просто в тупую переписываешь??
while( $row = mysql_fetch_object($qr1) ){
замени на
while( $row = mysql_fetch_object($res) ){
0
3 / 3 / 3
Регистрация: 13.02.2009
Сообщений: 465
29.03.2011, 15:15 17
Кстати, насчет получения количества записей и самих записей - лучше делать в 2 запроса типа

SELECT COUNT(*) WHERE ...

^^ Количество записей

SELECT * WHERE ... LIMIT A, B

^^ Сами записи

Тогда обработка количества записей будет на сервере, это немного дольше (немного!), но зато сами записи не будут передаваться полностью, а передастся лишь нужная часть (обработка на сервере).
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
29.03.2011, 15:40 18
ИМХО лучше
SELECT * WHERE..
И получить количество записей с помощью mysql_num_rows()... Как и сделано у меня.
0
3 / 3 / 3
Регистрация: 13.02.2009
Сообщений: 465
29.03.2011, 15:46 19
Одним запросом - ты переправляешь все записи в массив. Когда их 100 или 200 это действительно ерунда. 1000 или 2000 уже требуют на загрузку некоторого времени.

А реально отображаешь ты допустим только 50. Зачем тогда грузить все 2000 записей?

Так как я сказал - сервер выбирает эти 50 записей и их выдает.
0
0 / 0 / 0
Регистрация: 28.03.2011
Сообщений: 11
29.03.2011, 15:59 20
не могу понять о чем ты.
select ... limit 10,10
и select ... limit 10, 10000 выполняются практически одинаковое время, если не делать fetch.. А вот как раз count() довольно другоемкий запрос, он займет много времени, хотя такой будет всего 1 н страницу, так что это неважно. Так как я предложил я будет работать быстрее, но этого никто не увидит=)
0
29.03.2011, 15:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2011, 15:59
Помогаю со студенческими работами здесь

Расширить постраничное разбиение для модуля DNN
Всем привет! Пытаюсь &quot;расширить&quot; постраничное разбиение для модуля DNN. В модуле оно реализовано...

Как на JavaScript реализовать постраничное разбиение товаров в интернет-магазине?
Всем привет! Есть массив товаров длиной 100 элементов. На странице допускается к показу 16...

Как изучать mysql и php? Сначала php, а потом mysql или наоборот, или сразу?
Хочу изучить mysql и php. Как их изучать? Сначала php, а потом mysql или наоборот, или сразу и то и...

Подключение к БД MySQL. Xamarin Studio: C#-PHP-MySQL
Здравствуйте! Необходимо реализовать подключение к удаленной БД MySQL. Пишу Android-приложение в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru