Автор Тема: Постраничный просмотр MySQL  (Прочитано 7246 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« : 27 Июля 2001, 16:45:51 »
Всем привет!
Кто подскажет как с помощью "LIMIT" на Perl\'е сделать постраничный промотр MySQL?

Оффлайн Realtor from Moscow

  • Любитель пива
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 464
  • +0/-0
  • 2
    • Просмотр профиля
    • http://building.msk.ru
Постраничный просмотр MySQL
« Ответ #1 : 09 Августа 2001, 02:07:10 »
Должно быть так. Например у тебя блоки линков страниц по 10 штук. Всего страниц, например 56.
Если выбрана страница из 1-10, то выводится: 1-2-3-4-5-6-7-8-9-10 Дальше>>> где дальше линк на страницу 11.
Если выбрана страница из 11-20, то выводится: <<<Назад 11-12-13-14-15-16-17-18-19-20 Дальше>>> где линк "дальше" на страницу 21, а линк "назад" на страницу 10. и т.д.
И последнее. Если выбрана страница из 51-56, то выводится: <<<Назад 51-52-53-54-55-56 где линк "назад" на страницу 50.
Я думаю, что так будет очень логично.



[Изменено 8.8.2001 автор: Realtor from Moscow]
Павел Габов
Мой Reg]life тчк building тчк msk тчк ru. Building.Msk.ru :: Коммерческая недвижимость Москвы и Подмосковья.

Оффлайн Light Elf

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 66
  • +0/-0
  • 0
    • Просмотр профиля
Постраничный просмотр MySQL
« Ответ #2 : 28 Июля 2001, 07:19:32 »
select * from TABLE_NAME order by (desc|asc)  limit $FROM, $LIMIT;
С уважением,
Light Elf

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« Ответ #3 : 29 Июля 2001, 17:32:00 »
Так я и сам могу :).
Вопрос в том, чтобы сделать навигацию по страницам (::1-10::11-20).

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Постраничный просмотр MySQL
« Ответ #4 : 29 Июля 2001, 23:30:31 »
Цитировать
Ilya (29-07-2001 17:32):
Так я и сам могу :).
Вопрос в том, чтобы сделать навигацию по страницам (::1-10::11-20).
передавай через QUERY_STRING номер страницы.
$всего_на_одной_странице = 10;
$sqlquery = "... LIMIT ",(номерстраницы*$всего_на_одной_странице)," $всего_на_одной_странице"
ну, будем исповедоваться?

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« Ответ #5 : 30 Июля 2001, 18:28:23 »
В это я тоже втыкаю :).
Вот чего не пойму, так это то, как сгенерировать внизу страницы ссылки навигации?
Что на что надо делить? Короче полный п@дец. :) ???  :(.

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Постраничный просмотр MySQL
« Ответ #6 : 30 Июля 2001, 19:05:53 »
1. ругаться тут не надо.
2. ну раз ты везде и во все "втыкаешь" - что ж ты сразу нам тугодумам не объяснил что тебе конкретно надо?
а страницы генерятся так:

получаешь $resultall - через SELECT БЕЗ LIMIT
примерно так (а то вдруг ты в это случайно не втыкаешь):
$sqlq=" SELECT * FROM table ";
$resultall=mysql_db_query ($db, $sqlquery, $link);
$sqlq .="... LIMIT ",(номерстраницы*$всего_на_одной_странице)," $всего_на_одной_странице";
$result=mysql_db_query ($db, $sqlquery, $link);

значит ceil($resultall/$всего_на_одной_странице) равен количеству страниц необходимых для вывода всей таблицы.

я надеюсь как из этого числа циклом сгенерить ссылки на страницы ты сам "воткнешь"
ну, будем исповедоваться?

Оффлайн Realtor from Moscow

  • Любитель пива
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 464
  • +0/-0
  • 2
    • Просмотр профиля
    • http://building.msk.ru
Постраничный просмотр MySQL
« Ответ #7 : 31 Июля 2001, 03:23:22 »
Пояснять не буду, сам поймешь. Больше логики, чем Перла

$my_data=&call_mysql($zapros);
my ($my_data_ref) = $my_data->fetchall_arrayref();
my $table_rows = $my_data->rows;

$count_page = int($table_rows/$count_news_view);
if (($count_page*$count_news_view) < $table_rows) {$count_page++;}

my ($min_page) = int (($page-1)/$max_count_link_page);
$min_page = ($min_page*$max_count_link_page)+1;
my ($max_page) = ($min_page + $max_count_link_page)-1;
if ($min_page == 1) {$prev_page=0;}
   else { $prev_page=$min_page-1;
   }
$next_page = $max_page+1;
if ($next_page >= $count_page ) {$next_page=0;}
if ($max_page >= $count_page ) {$max_page=$count_page;}

my ($min_news) = (($page-1)*$count_news_view);
my ($max_news) = $min_news+$count_news_view;
if ($max_news >= $table_rows) {$max_news=$table_rows;}

for ($ii=$min_news;$ii<$max_news;$ii++) {
my ($tab_id, $tab_tema, $tab_path) = @{$my_data_ref->[$ii]};

..... вывод

} #end for

print<



end_test
;
if ($prev_page) {
print<
end_test
;
}
for ($ii=$min_page; $ii<=$max_page;$ii++) {
if ($ii == $page) {
print<
end_test
;
} # end if
else {
print<
end_test
;
} # end else
}
if ($next_page) {
print<
end_test
;
}
print<
<<<Назад  $ii  $ii  Дальше>>>  


end_test
;
Павел Габов
Мой Reg]life тчк building тчк msk тчк ru. Building.Msk.ru :: Коммерческая недвижимость Москвы и Подмосковья.

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Постраничный просмотр MySQL
« Ответ #8 : 31 Июля 2001, 07:16:06 »
Цитировать
AliMamed (30-07-2001 19:05):
получаешь $resultall - через SELECT БЕЗ LIMIT
примерно так (а то вдруг ты в это случайно не втыкаешь):
$sqlq=" SELECT * FROM table ";
$sqlq=" SELECT count(*) FROM table ";
Поскольку все записи не нужны, а нужно лишь их количество.:)
2B OR NOT 2B = FF

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Постраничный просмотр MySQL
« Ответ #9 : 31 Июля 2001, 10:13:43 »
Цитировать
Chs (31-07-2001 07:16):
$sqlq=" SELECT count(*) FROM table ";
Поскольку все записи не нужны, а нужно лишь их количество.:)

век живи - век учись  :* :)
ну, будем исповедоваться?

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« Ответ #10 : 04 Августа 2001, 18:19:54 »
После второй недели медетации мой одурманеный мозГ (чуть не привратившийся в Perl-итерпритатор) сгенерировал мега-код. Кому-нибудь смешно? Нет? Тогда смотрите мега-код! :)

#- - - - - - - - - - - - - - - - - - - -
#!/usr/bin/perl

$perpage = 5;
$dbhost = "localhost";
$dbname = "";
$tblname = "";
$dbuser = "";
$dbpass = "";

use CGI qw /:standard :html3/;
$query = new CGI;
$page = $query->param(\'page\');
if ($page eq ""){$page = 0}

&getdata;

sub getdata {
use DBI;
my $db = DBI->connect ("DBI:mysql:$dbname:$dbhost","$dbuser","$dbpass");

my $query0 = ("SELECT id FROM $tblname");
my $output0 = $db->prepare($query0);
$output0->execute;
$rows = $output0->rows;

$first = $page*$perpage;
my $query = ("SELECT * FROM $tblname limit $first,$perpage");
my $output = $db->prepare($query);
$output->execute;
print "Content-type:text/html\\n\\n";
print "
";
while (($pole1, $pole2, $pole3) = $output->fetchrow_array)
{print "\\n";}
print "
$pole1$pole2$pole3
";
&navigation;
}

# - - - - - - - - - - - - - - - - - - - - - - - - -
# А это тот самый мега-код :)
# - - - - - - - - - - - - - - - - - - - - - - - - -

sub navigation {

$pages = int(($rows-1) / $perpage)+1;
$proverka = $pages-1;
$pp = 0;
if ($page != 0 ){
print "<<<Назад - ";
}
else {print "
- "}
while ($pages > 0)
{
print "";
$pp = ++$pp;
if ($page == ($pp-1)){print "$pp
"}
else {print "$pp"}
print " - ";
$pages = ($pages-1);
}
if ($proverka != $page){
print "Вперед>>>";
}
print "
";

}
# - - - - - - - - - - - - - - - - - - - - - - - - -
# The end
# - - - - - - - - - - - - - - - - - - - - - - - - -

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« Ответ #11 : 09 Августа 2001, 10:59:26 »
А если посмотреть на это с другой стороны:
<<< назад - это предыдущая страница, а
вперед >>> - следующая?
Если ты находишься на пятой странице, то нажав на "вперед >>>" переместишься на следующую (шестую страницу). Короче, чтобы просмотреть все страницы, тебе будет нужно  нажимать только "вперед >>>".

Ты Yandex\'a знаешь ;)? Посмотри, как там устроена навигация (http://ya.ru), я думаю, что там не может быть не правильно. Мы просто говорим про разные виды навигации.

Ты согласен?

P.S. Поспорить тут можно только о том, какой из них удобней.

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« Ответ #12 : 10 Августа 2001, 11:20:55 »
Simply the best ;)

Оффлайн Realtor from Moscow

  • Любитель пива
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 464
  • +0/-0
  • 2
    • Просмотр профиля
    • http://building.msk.ru
Постраничный просмотр MySQL
« Ответ #13 : 07 Августа 2001, 23:56:56 »
Цитировать
- Для чего предусматривать обработку отрицательного значения $page?

А вдруг какой приколист вручную заGETит URI скрипта? А ты свой сайт укажешь в портфолио при приеме на работу :D
Лучше сразу привыкнуть к стилю программирования. Обрабатывать все возможные ошибки; именовать переменные не $x45, а $line_end и т.д.

Цитировать
- На счет "" - эксплорер и так схавает ;).
А если пользователь смотрит в другой смотрелке? Для примера Subscribe.ru мне отказало в открытии рассылки на основании того, что в Netscape полосок оформления не видно :mad:
Тебе сложно вставить пару строк?

Цитировать
- На счет неправильной обработки <<<Назад - Эсли ты на четвертой странице, то предыдущая третья, значит ссылка на предыдущую страницу должна вести на третью страницу :P. Или я не понял твоего замечания?
Дело вследующем: если выбрана страница 4, то генерится строка <<<Назад 1-2-3-4-5-... где <<<Назад линкует на страницу 3. Что в корне не правильно.

Цитировать
- Я только разбираюсь с Perl\'ом, поэтому некоторый код я ваще не могу понять (в данном случае твой). В таких случаях приходится изобретать велосипед (иногда получается только самокат :) ).
 
Спрашивай - ответим :cool:
Павел Габов
Мой Reg]life тчк building тчк msk тчк ru. Building.Msk.ru :: Коммерческая недвижимость Москвы и Подмосковья.

Оффлайн Ilya

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
    • www.svd.ru
Постраничный просмотр MySQL
« Ответ #14 : 08 Августа 2001, 13:20:01 »
Так, куда должна вести ссылка "<<<назад"?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28