Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как сделать вывод записей из бд с постраничной навигацией?

Как сделать вывод записей из бд с постраничной навигацией?


     19.08.2013    Общие вопросы по PHP, Модули, MySQL    5078

вопрос
Всем доброго времени суток!
Подскажите пожалуйста как вывести данные из бд по страницам?
К пример у меня 12000 записей в таблице, лимит записей на страницу к примеру 100, т.е. нужно чтобы выводилось 100 записей из бд на страницу и внизу была навигация по страницам 1,2,3,4,5, ...... , подскажите пожалуйста как это сделать все облазил пробывал не помогло.Даже в исх. дле смотрел, но не понял как сделать.


$cars = $db->query("SELECT * FROM cars ORDER BY id DESC LIMIT 100");
    while ($rows = $db->get_row($cars))
    {
        $id = $rows['id'];
        $name = $rows['name'];
            $car .="
                <tr>
                <td align='center'>$i</td>
                <td align='center'>$id</td>
                <td align='center'>$name</td>
                </tr>";
        $i++;
    }
    $db->free($cars);

Ответа пока нет


1 комментарий

TheImDim
Юзер

TheImDim - 20 августа 2013 11:23 -


/*
=====================================================
Функция пагинации
-----------------------------------------------------
Массив $navi содержит основную информацию.

$navi['start'], $navi['numb'] - Для MySQL LIMIT;
$navi['panel'] - Сама панель навигации;
$navi['page'] - Текущая страница;
$navi['all_page'] - всего страниц;

Функция принимает:
$num_news - количество новостей на страницу;
$all_news - всего новостей;
$way - путь для ссылок в пагинации;
=====================================================
*/

function navigation( $num_news, $all_news, $way ) {
    global $config;
        
    //Находим число страниц
    $all_page = intval($all_news/$num_news);
    if( intval( $all_page * $num_news ) !== intval( $all_news ) ) { $all_page++; }
    $navi['all_page'] = $all_page;
    
    //Определяем страницу
    $page = intval( $_REQUEST['page'] );
    if( $page < 1 || !$page ) { $page = 1; }
    else if( $page > 0 && $page > $all_page ) { $page = $all_page; }
    $navi['page'] = $page;
    
    $prev = $page-1;
    $next = $page+1;
    
    //Для MySQL запроса
    if( $invert ) { $navi['start'] = $all_news - $page * $num_news; if( $navi['start'] < 0 ) $navi['start'] = 0; }
    else $navi['start'] = ( $page * $num_news ) - $num_news;
    $navi['numb']  = ( $num_news );
    
    if( $all_page < 2 ) return false;
            
      //Определяем откуда начинать
      $pg_m = $page - 3;
      $pg_p = $page + 4;
      $pg_f = $pg_p + 4;
    
      if( $pg_m > 0 && $all_page > 6 && $pg_f <= $all_page ) {
        $n = $pg_m;    
        if( $page >= 5 && $all_page > $page_limit ) {
          $navi['panel'] .= '<a page="1" href="'.$way.'1"><span>1</span></a><span>..</span>';
        }        
      } else if( $pg_f >= $all_page && $page > 6 ) {
        $n = $all_page - 6;
        $navi['panel'] .= '<a page="1" href="'.$way.'1"><span>1</span></a><span>..</span>';
      }  else {
        $n = 1;
      }
    
      //Где заканчивать
      if ( $all_page > 6 && $pg_p < $all_page ) $finish=true;
    
      if( $pg_p < $all_page && $all_page > 4 && $page > 1) {
        $k = $pg_p;
      } else if( $page < 3 && $pg_f < $all_page ) {
        $k = $pg_p + 1;
      } else if( $finish ) {
        $k = $all_page;
      } else {
        $k = $all_page + 1;
      }
    
    
      //Генерируем страницы
      for($n; $n<$k; $n++) {
        if($page == $n) {
          $navi['panel'] .= '<span class="selected">'.$n.'</span>';
        } else {
          $navi['panel'] .= '<a page="'.$n.'" href="'.$way.$n.'"><span>'.$n.'</span></a>';
        }
      }
    
      //Последняя страница    
      if( $pg_p < $all_page && $all_page > $page_limit ) {
        $navi['panel'] .= '<span>..</span>';
      }
    
      if ( $finish ) { $navi['panel'] .= '<a page="'.$all_page.'"  href="'.$way.$all_page.'"><span>'.$all_page.'</span></a>'; }
      //Последняя страница
        
      return $navi;
}

$all = $db->super_query("SELECT COUNT(*) AS c FROM cars");

$navi = navigation(10, $all['c'], 'http://site.ru/page-');

$cars = $db->query("SELECT * FROM cars ORDER BY id DESC LIMIT $navi['start'], $navi['numb'] ");
    while ($rows = $db->get_row($cars))
    {
        $id = $rows['id'];
        $name = $rows['name'];
            $car .="
                <tr>
                <td align='center'>$i</td>
                <td align='center'>$id</td>
                <td align='center'>$name</td>
                </tr>";
        $i++;
    }
    $db->free($cars);


Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх