Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: снова постраничный вывод

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: запутался совсем...
ninjajnin
Отправлено: 09 Сентября, 2015 - 23:02:39
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




Вот я вывожу постранично данные из базы в обратном порядке. На страничке по 20 записей. Страничек получилось, к примеру, 10 всего. Соответственно я имею на 1й странице последние 20 записей из базы, т.к. вывод в обратном порядке, а на 10й странице - первые 20 записей.
То есть наглядно мы видим на первой странице (результат 1):

Цитата:
запись 49
запись 48
запись 47
запись 46
...

Страницы: 1 2 3 4 5 6 7 8 9 10


и соответственно на последней (результат 2):

Цитата:
...
запись 4
запись 3
запись 2
запись 1

Страницы: 1 2 3 4 5 6 7 8 9 10


А требуется, что бы страницам из результата 2 соответствовали записи из результата 1,
а страницам из результата 1 соответствовали записи из результата 2

Развернуть выходящие данные из базы обратно не вариант, т.к. записи нужны именно в таком порядке.
для наглядности, должно быть так:

Цитата:
...
запись 4
запись 3
запись 2
запись 1

Страницы: 1 2 3 4 5 6 7 8 9 10


и соответственно

Цитата:
запись 49
запись 48
запись 47
запись 46
...

Страницы: 1 2 3 4 5 6 7 8 9 10


Подскажите в какую сторону копать?

через определение общего количества страниц?

сам код
PHP:
скопировать код в буфер обмена
  1.  
  2. // база данных
  3. $database = "database" ;
  4.  
  5. //название таблицы в базе
  6. $table = "text" ;
  7.  
  8. // кол-во записей на странице
  9. $users_on_page = "4";
  10.  
  11. mysql_select_db($DB_NAME);
  12.  
  13. // считаем число записей
  14. $count = mysql_fetch_array(mysql_query("select count(id) from `$table`")) ;
  15.  
  16. // считаем страницы
  17. $total = ceil($count[0]/$users_on_page);
  18.  
  19. // страницы в url
  20. if(empty($_GET["p"])){$_GET["p"] = "1" ;}
  21. $p = $_GET["p"] ;
  22.  
  23. if(!ctype_digit($p) or $p > $total) : $p = "1" ;
  24. endif;
  25.  
  26. // формируем запрос
  27. $first = $p*$users_on_page-$users_on_page ;
  28. $result=mysql_query("select * from `$table` ORDER BY id DESC limit $first, $users_on_page") ;
  29.  
  30. //вывожу данные
  31.                 while($data=mysql_fetch_array($result)) {
  32.                         print "<div><div>#".$data[0].' ' ;
  33.                         print $data[2]." " ;
  34.                         print $data[1]."</div>" ;
  35.                         print $data[3]."</div>" ;
  36.                 }
  37.  
  38. //вывожу кол-во страниц
  39. for($i=1; $i< $total+1;$i++){
  40.     $html .= "<a href='index.php?p=".$i."'>".$i."</a> ";
  41. }
  42.  
  43. echo $html;
  44.  
  45.  

(Отредактировано автором: 09 Сентября, 2015 - 23:28:40)

 
 Top
DlTA
Отправлено: 09 Сентября, 2015 - 23:29:47
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




ORDER BY ... ASC/DESC
 
 Top
ninjajnin
Отправлено: 10 Сентября, 2015 - 10:27:15
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




ORDER BY ... ASC/DESC не поможет, т.к. при ASC на последней странице мы получаем записи вида:

Цитата:

запись 7
запись 8
запись 9
запись 10

Страницы: 1 2 3 4 5 6 7 8 9 10


а нужно то же самое в обратном порядке:

Цитата:

запись 10
запись 9
запись 8
запись 7

Страницы: 1 2 3 4 5 6 7 8 9 10


казалось бы, тут поможет DESC, но нет, с ним мы видим запись вида:

Цитата:

запись 4
запись 3
запись 2
запись 1

Страницы: 1 2 3 4 5 6 7 8 9 10


вроде бы то, что нужно, но нет, так происходит вывод первых записей, а нужны последние...
не стандартная задача, да?

(Отредактировано автором: 10 Сентября, 2015 - 10:30:51)

 
 Top
Мелкий Супермодератор
Отправлено: 10 Сентября, 2015 - 10:50:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. (
  2. SELECT /**/ ORDER BY id DESC LIMIT ? offset ?
  3. ) ORDER BY id ASC

?


-----
PostgreSQL DBA
 
 Top
andrewkard
Отправлено: 10 Сентября, 2015 - 11:15:50
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Мелкий
Опередил.
PHP:
скопировать код в буфер обмена
  1.  
  2. $count = 5; //на странице
  3. $page = 2; //страница
  4. $start = $count * ($page-1);
  5. $sql = mysql_query("(SELECT  id FROM `test` ORDER BY id LIMIT $start, $count) ORDER BY id DESC") or die(mysql_error());
  6.  
 
 Top
ninjajnin
Отправлено: 10 Сентября, 2015 - 12:33:12
Post Id


Новичок


Покинул форум
Сообщений всего: 38
Дата рег-ции: Сент. 2015  


Помог: 0 раз(а)




КРА-СО-ТА просто, блин, спасибо большое вам, чуваки!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB