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]   

> Без описания
darkhero
Отправлено: 23 Апреля, 2009 - 09:53:53
Post Id


Новичок


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


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

[+]


Добрый день!

Я тут пишу паджинатор, и у меня возникла проблема.
Я определяю текущую страницу, количество страниц вообще, какая будет следующая и предыдущая страницы:

CODE (text):
скопировать код в буфер обмена
  1.  $pageid=$_GET['page'];
  2.           $pageid=preg_replace("/[^\D]+/", "", $pageid);
  3.           settype($pageid,"integer");
  4.           if ($pageid<=0) $pageid=1;
  5.           $post_per_page=10;
  6.           $maxid=mysql_result(mysql_query("SELECT COUNT(id) FROM posts WHERE 1"),$maxid);
  7.        
  8.         $from=$maxid-$post_per_page*$pageid;
  9.         $to=$from+$post_per_page;
  10.         $prevpage=$pageid-1;
  11.         $nextpage=$pageid+1;
  12.         $totalpages=ceil($maxid/$post_per_page);
  13.             if ($pageid>$totalpages) $pageid=$totalpages;
  14.        
  15. if ($me->logged==1) $post_sql=mysql_query("SELECT * FROM posts WHERE  id>$from and id<=$to ORDER BY id DESC");


Если я беру пустую таблицу, и начинаю её заполнять, то всё нормально разбивается на странички, но стоит мне только удалить один или несколько постов, начинается ерунда: id начинают идти с "дырками", то есть, например, не 1-2-3-4-5, а 1-4-5. А из базы я забираю именно по id, то есть мой sql-запрос уже не канает.
Я так понял, нужно посчитать $from и $to не по значению id, а по его расположению в таблице, то есть мне нужно в $from и $to класть не значение id, а номер строки, и уже исходя из этого составлять запрос.

Помогите, пожалуйста, с составлением запроса и присвоением $from и $to
 
 Top
valenok
Отправлено: 23 Апреля, 2009 - 11:01:02
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Используйте LIMIT 10,10
где первая 10 это с какой записи в таблице по счету начнется выборка
вторая десятка это колво выбранных записей

LIMIT $page*$per_page , $per_page+1

Я обычно выбираю на одну больше для того чтобы выяснить будет ли следующая страница.


-----
Truly yours, Sasha.
 
My status
 Top
darkhero
Отправлено: 23 Апреля, 2009 - 11:10:24
Post Id


Новичок


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


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

[+]


valenok пишет:
Используйте LIMIT 10,10
где первая 10 это с какой записи в таблице по счету начнется выборка
вторая десятка это колво выбранных записей

LIMIT $page*$per_page , $per_page+1

Я обычно выбираю на одну больше для того чтобы выяснить будет ли следующая страница.


То есть, запрос LIMIT 10,10 возьмёт 10 строк начиная с 10?
Отлично, спасибо!

И, пользуясь случаем, вопрос: я нормально фильтрую входящий параметр $page? Того что я делаю - достаточно, или лучше ещё что-то делать?

И ещё один вопрос: я попробовал сделать с LIMIT, всё прекрасно заработало, но при попытке добавить в запрос ORDER BY id DESC выходит ошибка.:
mysql_fetch_object(): supplied argument is not a valid MySQL result resource in Z:\home\blog3\www\contents\content.index.php on line 37

Вот запрос:
CODE (text):
скопировать код в буфер обмена
  1. $post_sql=mysql_query("SELECT * FROM posts LIMIT $from,$post_per_page ORDER BY id DESC");

(Отредактировано автором: 23 Апреля, 2009 - 11:29:23)

 
 Top
valenok
Отправлено: 23 Апреля, 2009 - 11:55:39
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




$page = @intval($_GET['page']);
http://phpfaq[dot]ru/debug


-----
Truly yours, Sasha.
 
My status
 Top
EuGen Администратор
Отправлено: 23 Апреля, 2009 - 12:15:31
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




ORDER BY следует помещать перед LIMIT


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
darkhero
Отправлено: 24 Апреля, 2009 - 11:43:01
Post Id


Новичок


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


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

[+]


EuGen пишет:
ORDER BY следует помещать перед LIMIT

Я уже понял, всё работает, спасибо!
 
 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