Постраничный вывод новостей
Добрый день, уважаемые знатоки.
Есть код функции вывода новостей, необходимо этот вывод сделать постранично. // выведем новости //$typ=0 кратко 1- полно function GetNews($typ=0) {global $mysql; $tmpcont=''; ////////////////////////////////////// $coltov=15; //количество выводимых новостей на странице echo ('coltov='.$coltov); if(isset($_GET['p'])){ $p=$_GET['p']; echo ('<br>'."isset: ".$p.'<br>');} else { $p=1; echo ('<br>'."nope: ".$p.'<br>');} $limitstart=($p-1)*$coltov; $query='select count(nw.nomer) as cn from neonnews as nw order by datas' ; $res = $mysql->sql_query($query) ; $list = $mysql->sql_fetchrow($res) ; $colvsego=$list['cn']; echo $colvsego; $det='<a href="?usrnews='.$coltov.'&cid=news&p=%s">%s</a>'; //ссылка на страницу $pages=ViewPage($colvsego,$det,$p,$coltov,5); //5 (default = 10) - количество одновременно выводимых страниц ///////////////////// $query='select * from neonnews order by datas DESC'; $res = $mysql->sql_query($query) ; if($coltov>0) { $tmpcont='fuck <div style="float:left; '._wdth.'">'.$pages.$listsortnw._templdetacs1; for($i=1; $i<=$coltov; $i++) { $listviv = $mysql->sql_fetchrow($res) ; if($typ) $tmpcont.= sprintf(_templnewsf,$listviv['datas'],$listviv['anons'],$listviv['news']); else $tmpcont.= sprintf(_templnews,$listviv['datas'],$listviv['anons'],$listviv['news']); } $tmpcont.='</div>'._templdetacs2; } $mysql->sql_freeresult($res); return $tmpcont; } Новости выводятся, номера страниц тоже (1, 2, 3, 4 и пр.), переход на них посредстом GET осуществляется (номер страницы отображается в адресной строке). Однако новости не меняются, т.е. на первой странице были новости, например, о новой породе собак 2014, на второй (третьей или любой другой), тоже новости о новой породе собак 2014, хотя должны быть о старой модели автомобиля 2013. Подозреваю, что дело в SQL-запросе. Вероятнее всего, не хватает "limit'.$limitstart.','.$coltov" в query, но как-то не выходит у меня лимитировать запрос (если лимитировать первый запрос, то не выводятся странички (1, 2, 3, 4 ...), если второй - не выводятся сами новости). Или, может, нужно сделать новый запрос к БД? Заранее благодарен и надеюсь на вашу помощь. P.S. Функция ViewPage формирует как раз эти 1, 2, 3, 4 странички, их количество, их внешний вид и т.п. P.S.S. В БД neonnews есть столбцы nomer (тот же id по сути), anons (короткая версия новости), datas (дата), news (полная версия новости). P.S.S.S. Всякие echo там для себя, для проверки. |
Цитата:
У нас, например, можно использовать "служебную переменную" SELECT *, %vid FROM (<твой_запрос>) WHERE %vid BETWEEN <Page-1>*<N> AND <Page>*<N> Где: Page - номер страницы N - количество строк на странице Для тебя может подойдет что-то из этого... ;) |
Мда. Спасибо. Нет, серъезно, первый же результат поиска в яндексе помог и проблема решилась. Т.е. добавил я лишь limit '.$coltov.' offset '.$limitstart в второй запрос. А гугл мне подобного не выдавал, плохой гугл, плохой... Ну или я не там искал)
Еще раз спасибо =) |
Цитата:
|
Странно, что LIMIT offset, rows - не решило проблему, а LIMIT rows OFFSET offset - решило...
|
Первое значение LIMIT - старт, второе - сколько.
LIMIT 10, 20 --- со строки 10 еще 20 строк, то есть 10-30. Цитата:
Ну и главное, чтобы реализовать страничность требуется узнать каково общее число записей в заданных условиях (where, group by, etc). UPD. Увидел как оно реализовано. Когда ньюсы внезапно обрастут связанными таблицами такой метод обломится. |
Цитата:
mysql paging - https://www.google.com/search?safe=o....0.C_mkesy9lDE |
Часовой пояс GMT +3, время: 03:16. |