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
Форумы портала PHP.SU :: Версия для печати :: Помогите с сотавлением запроса.
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Помогите с сотавлением запроса.

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

1. darkhero - 23 Апреля, 2009 - 09:53:53 - перейти к сообщению
Добрый день!

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

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
2. valenok - 23 Апреля, 2009 - 11:01:02 - перейти к сообщению
Используйте LIMIT 10,10
где первая 10 это с какой записи в таблице по счету начнется выборка
вторая десятка это колво выбранных записей

LIMIT $page*$per_page , $per_page+1

Я обычно выбираю на одну больше для того чтобы выяснить будет ли следующая страница.
3. darkhero - 23 Апреля, 2009 - 11:10:24 - перейти к сообщению
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");
4. valenok - 23 Апреля, 2009 - 11:55:39 - перейти к сообщению
$page = @intval($_GET['page']);
http://phpfaq[dot]ru/debug
5. EuGen - 23 Апреля, 2009 - 12:15:31 - перейти к сообщению
ORDER BY следует помещать перед LIMIT
6. darkhero - 24 Апреля, 2009 - 11:43:01 - перейти к сообщению
EuGen пишет:
ORDER BY следует помещать перед LIMIT

Я уже понял, всё работает, спасибо!

 

Powered by ExBB FM 1.0 RC1