|
|
|
| Народ подскажите оптимальное решение вопроса.
При выборке из БД MySQL выдается длинный список записей, как правильно разделить его на страницы с шагом в 10 записей?
Вод код выдачи:
<?
$r_posl = mysql_query ("SELECT * FROM object WHERE id_categ = '1' ORDER BY id DESC");
$nr_posl=mysql_num_rows($r_posl);
if ($nr_posl>0)
{
while ($rr_posl = mysql_fetch_array($r_posl))
{
if (isset ($rr_posl['id']))
{
// Вывод данных
echo $rr_posl['name'];
echo $rr_posl['kopi'];
echo $rr_posl['ob'];
echo $rr_posl['dtl'];
echo '<br>';
}
}
}
?>
|
| |
|
|
|
|
|
|
|
|
для: cheops
(04.10.2008 в 12:25)
| | Посмотрел указанную вами тему и все посты на которые имелись ссылки из указанной темы, но к сожалению так и не нашел ответа. Про разбиение на станицы информации выводимой из БД MySQL там крайне мало информации, или я просто не могу вникнуть в примеры. Просто я новичек и плохо разбираюсь в php и MySQL информацию изучаю на живых примерах. Если не сложно приведите пример кода для разбиения информации на страницы, для приведенного выше кода. | |
|
|
|
|
|
|
|
для: Legenda
(04.10.2008 в 12:43)
| | Хорошо, давайте отталкиваться от функции вида
<?php
function pager($page, $total, $pnumber, $page_link, $parameters)
{
// Вычисляем число страниц в системе
$number = (int)($total/$pnumber);
if((float)($total/$pnumber) - $number != 0) $number++;
// Проверяем есть ли ссылки слева
if($page - $page_link > 1)
{
echo "<a class=menuinfo href=$_SERVER[PHP_SELF]?page=1{$parameters}>
<nobr>[1-$pnumber]</nobr></a> <em class=currentpage>
<nobr> ... </nobr> </em> ";
// Есть
for($i = $page - $page_link; $i<$page; $i++)
{
echo " <a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
<nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a> ";
}
}
else
{
// Нет
for($i = 1; $i<$page; $i++)
{
echo " <a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
<nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a> ";
}
}
// Проверяем есть ли ссылки справа
if($page + $page_link < $number)
{
// Есть
for($i = $page; $i<=$page + $page_link; $i++)
{
if($page == $i)
echo "<em class=currentpage><nobr> [".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] </nobr> </em>";
else
echo " <a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
<nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a> ";
}
echo "<em class=currentpage><nobr> ... </nobr> </em>
<a class=menuinfo href=$_SERVER[PHP_SELF]?page=$number{$parameters}> <nobr>[".(($number - 1)*$pnumber + 1)."-$total]</nobr></a> ";
}
else
{
// Нет
for($i = $page; $i<=$number; $i++)
{
if($number == $i)
{
if($page == $i)
echo "<em class=currentpage><nobr> [".(($i - 1)*$pnumber + 1)."-$total] </nobr></em>";
else
echo " <a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
[".(($i - 1)*$pnumber + 1)."-$total]</a> ";
}
else
{
if($page == $i)
echo "<em class=currentpage><nobr> [".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."] </nobr> </em>";
else
echo " <a class=menuinfo href=$_SERVER[PHP_SELF]?page=$i{$parameters}>
<nobr>[".(($i - 1)*$pnumber + 1)."-".$i*$pnumber."]</nobr></a> ";
}
}
}
}
?>
|
Т.е. текущий номер страницы передается через GET-параметр page. Тогда выбрать данные для текущей страницы можно при помощи запроса вида
<?php
// Отображаем темы по $pnumber штук
$page = intval($_GET['page']);
$pnumber = 30;
// Если в строке запроса не передана страница
// выводим первую страницу
if($page <= 0) $page = 1;
$begin = ($page - 1)*$pnumber;
// Запрашиваем информацию об $pnumber позициях
$query = "SELECT * FROM object
WHERE id_categ = '1'
LIMIT $begin, $pnumber";
?>
|
А вывести постраничную навигацию можно при помощи скрипта
<?php
$page_link = 4;
// Запрашиваем информацию о количестве всех позиций
$query = "SELECT COUNT(*) FROM object
WHERE id_categ = '1'";
$tot = mysql_query($query);
if(!$tot) exit(mysql_error());
if(mysql_num_rows($tot)) $total = mysql_result($tot,0);
// Выводим постраничную навигацию
pager($page, $total, $pnumber, $page_link, "");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.10.2008 в 13:39)
| | Что то не получается.
Ссылки на страницы выводятся и подсчет записей в БД идет корректный, но данные из БД выводятся всем массивом, т.е. все записи на одной странице. И при переходе на 2 и последующие страницы выдается весь список записей. | |
|
|
|
|
|
|
|
для: Legenda
(04.10.2008 в 14:04)
| | Запрос именно такой используете для извлечения данных
<?php
$query = "SELECT * FROM object
WHERE id_categ = '1'
LIMIT $begin, $pnumber";
?>
|
Если не сложно, прикрепите к сообщению дамп таблицы object, чтобы можно было воспроизвести ситуацию. | |
|
|
|
|
|
|
|
для: cheops
(04.10.2008 в 14:28)
| | А огромное спасибо!
Нашел свою ошибку, теперь все работает!
Еще раз огромное спасибо! | |
|
|
|