ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Алгоритмы постраничного вывода сообщений
  #1  
Старый 19.04.2007, 15:07
r0
Постоянный
Регистрация: 17.07.2005
Сообщений: 475
Провел на форуме:
1665310

Репутация: 488
По умолчанию Алгоритмы постраничного вывода сообщений

За неимением времени прошу поделиться сабжем, чем больше тем лучше. Хорошо, если свои, не выдернутые из порталов.
 
Ответить с цитированием

  #2  
Старый 19.04.2007, 15:38
censored!
Green member - Level 3
Регистрация: 02.11.2004
Сообщений: 1,337
Провел на форуме:
2398258

Репутация: 648


По умолчанию

А он всего один:
1. Определяешь общее количество сообщений.
2. Делишь на 10 (если надо 10 записей на странице) и округляешь в большую сторону - так определишь сколько всего страниц получится.
3. Делаешь запрос с лимитом (номер страницы умноженый на 10)
__________________
+ (это не крестик, это плюсик!)
__________________


 
Ответить с цитированием

  #3  
Старый 19.04.2007, 15:47
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

PHP код:
// Переменная хранит число пользователей выводимых на станице
$num 20;
// Извлекаем из URL текущую страницу
$page $_GET['page'];
// Определяем общее число пользователей в базе данных
$result mysql_query("SELECT COUNT(*) as cnt FROM `users`");
$users mysql_result($result0"cnt");
// Находим общее число страниц
$total intval(($users 1) / $num) + 1;
// Определяем начало сообщений для текущей страницы
$page intval($page);
// Если значение $page меньше единицы или отрицательно
// переходим на первую страницу
// А если слишком большое, то переходим на последнюю
if(empty($page) || $page 0$page 1;
  if(
$page $total$page $total;
// Вычисляем начиная к какого номера
// следует выводить сообщения
$start $page $num $num;
$result mysql_query("SELECT * FROM `users` ORDER by `id` ASC LIMIT $start$num");
for (
$i 0$i mysql_num_rows($result); $i++) {
       
//Здесь пишешь то, что должно выводиться на странице N раз
}
//Вводим ссылки на др.страницы
$file 'users.php'
       if (
$page != 1)
       
$pervpage "<a href= ./$file?page=1><<   </a>";
       
// <a href= ./$file?page=". ($page - 1) ."><</a> ";
// Проверяем нужны ли стрелки вперед
if ($page != $total$nextpage #"<a href= ./$file?page=". ($page + 1) .">></a>
                                   
"<a href= ./$file?page=" .$total">   >></a>";

// Находим две ближайшие станицы с обоих краев, если они есть
if($page 0)
$page2left " <a href= ./$file?page=". ($page 2) .">". ($page 2) ."</a> | ";
if(
$page 0)
$page1left "<a href= ./$file?page=". ($page 1) .">". ($page 1) ."</a> | ";
if(
$page <= $total)
$page2right " | <a href= ./$file?page=". ($page 2) .">". ($page 2) ."</a>";
if(
$page <= $total)
$page1right " | <a href= ./$file?page=". ($page 1) .">". ($page 1) ."</a>";

// Вывод меню
echo $page2left.$page1left."<b>".$page."</b>".$page1right.$page2right;
      } 
 
Ответить с цитированием

  #4  
Старый 19.04.2007, 15:49
GreenBear
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме:
19975136

Репутация: 4536


Отправить сообщение для GreenBear с помощью ICQ
По умолчанию

у тебя лишний мускул запрос
 
Ответить с цитированием

  #5  
Старый 19.04.2007, 15:59
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

ну это из двига совего выдернул..забыл убрать
 
Ответить с цитированием

  #6  
Старый 19.04.2007, 16:23
GreenBear
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме:
19975136

Репутация: 4536


Отправить сообщение для GreenBear с помощью ICQ
По умолчанию

я про то что кол-во рядов и данные можно взять из одного запроса.
 
Ответить с цитированием

  #7  
Старый 19.04.2007, 16:28
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

GreenBear, не темни....напиши как плучше..у мну и так все работает
 
Ответить с цитированием

  #8  
Старый 19.04.2007, 16:31
GreenBear
наркоман с медалью
Регистрация: 07.05.2005
Сообщений: 3,704
Провел на форуме:
19975136

Репутация: 4536


Отправить сообщение для GreenBear с помощью ICQ
По умолчанию

а чего темнить то? http://mysql.ru/
ну работает у тебя, а можно сделать на один запрос меньше.
 
Ответить с цитированием

  #9  
Старый 19.04.2007, 16:35
blaga
Постоянный
Регистрация: 23.03.2006
Сообщений: 977
Провел на форуме:
2976185

Репутация: 694


Отправить сообщение для blaga с помощью ICQ
По умолчанию

Вот мой вариант. Его писал не я и вообще не помню откуда он у меня, но работает хорошо. Итак:
$index = номер страницы;
$count = общее число элементов;
$delimiter = количество элементов на странице;
$href_link = шаблон ссылки где (%) - подстановка номера страницы;
$count_list= количество ссылок на другии листы помимо активного;

В запросе использовать:
Код:
LIMIT ( $index - 1 ) * $delimiter, $delimiter
Сама функция:
Код:
<?php
    function string_spliter($index, $count, $delimiter, $href_link, $count_list = 10)
    {
        $max_c = intval($count_list / 2) - 1;
        //$text .= '<center>';
        
        if ($count <= $delimiter)
        {
            return ; 
        }
        else
        {
            $max_int = intval($count / $delimiter);
            $max     = $count / $delimiter;
            $c_max = $max > $max_int ? $max_int + 1 : $max_int;
            
            if ($max_int > ($max_c * 2 + 1))
            {
                $r_min = ($index - $max_c >= 1)      ? $index - $max_c : 1     ;
                $r_max = ($index + $max_c <= $c_max) ? $index + $max_c : $c_max;
                
                if ($r_min < $max_c + 1)
                {
                    $r_max = $r_min + $max_c + $max_c;
                }
                
                if ($r_max - $r_min < $max_c * 2 )
                {
                    $r_min = $r_max - $max_c - $max_c ;
                }
            }
            else
            {
                $r_min = 1;
                $r_max = $c_max;
            }
            
            $r_min = $r_min < 1      ? 1      : $r_min;
            $r_max = $r_max > $c_max ? $c_max : $r_max;
            
            if ($index > 1)
            {
                $link = str_replace('(%)', $index - 1 , $href_link);
                $array[] = '<a href="' . $link . '">&laquo;</a> ';
            }
            else
            {
                $array[] = '&nbsp;';
            }
            
            for ($i = $r_min; $i <= $r_max; $i++)
            {
                $link = str_replace('(%)', $i, $href_link);
                $t = ($i == $index) ? $i . ' ' : "<a href='$link'>$i</a> ";
                $array[] = $t;
            }
            
            if ($index < $c_max)
            {
                $link = str_replace('(%)', $index + 1 , $href_link);
                $array[] = '<a href="' . $link . '">&raquo;</a>';
            }
            else
            {
                $array[] = '&nbsp;';
            }
            
        }
        
        if (is_array($array))
        {
            $text = '<center><table><tr>';
            foreach ($array as $cell)
            {
                $text .= '<td>' . $cell . '</td>';
            }
            $text .= '</tr></table></center>';
        }
        
        return $text;
    }
    
    $step = $_GET['step'];
    $step = $step == null ? 1 : $step;
    
    echo string_spliter($step, 120, 10, 'test2.html?step=(%)');

?>
 
Ответить с цитированием

  #10  
Старый 19.04.2007, 16:53
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,316
Провел на форуме:
16641028

Репутация: 2371


По умолчанию

blaga, это убожество =)честно
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форумные движки: обзор и обсуждение nerezus ПО для Web разработчика 61 29.04.2010 10:08
Полный спиок Услуг nAyK Разное - Покупка, продажа, обмен 13 28.02.2007 00:47
Проблемы защиты мгновенной передачи сообщений Noman Мировые новости 0 29.12.2006 02:34
Перехват пейджинговых сообщений silveran Телефония и связь 12 16.09.2005 13:55



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ