Главная » Полезные статьи » Язык PHP » Постраничный вывод из таблиц MSSQL с помощью PHP
Распечатать статью

Постраничный вывод из таблиц MSSQL с помощью PHP

На многих форумах по PHP видел один и тот же вопрос «Как сделать постраничный вывод из MSSQL?». Ответом очень часто служит «Все очень просто, используйте limit и все работает!», но, те кто дает такой ответ, видимо никогда не видели MSSQL достаточно близко и не знают, что к большому сожалению, там данной функции, в отличии от MySQL, нет. Я в своей практике написания сценариев на php, так же в основном пользовался связкой PHP + MySQL и вопросов не возникало. Но вот надо было перейти на хостинг с установленным MSSQL. После долгих поисков скрипта, который позволял бы сделать постраничный вывод из таблиц MSSQL с помощь PHP, без использования курсоров и ADO, и не найдя ничего, пришлось написать функцию, которая как раз и занимается обсуждаемым рутинным делом.

В основу постраничного вывода был положен запрос:

select top нужное_количество_для_вывода * from (select top количество_записей_из_которых_делается_вывод *       from таблица       order by таблица_id) as t1            order by таблица_id desc (таблица_id – поле вашей таблицы, по которому вы будете осуществлять сортировку)

Для работы нужной нам функции и правильной работы данного запроса надо знать несколько величин:

1) нужное количество строк для вывода

2) количество записей из которых делается выбор

3) на какой страницы мы находимся

4) сколько всего страниц.

Получившаяся функция выглядит так:

<? if (!@$_GET["page"]) { # если переменной с номером страницы еще нет, то создаем ее             $page=1;                                 # и присваиваем ей значение 1 } else { $page=$_GET["page"]; }         # иначе, присваиваем ей значение нажатой страницы # объявляем функцию с названием numberpage, имеющей следующие параметры: # 1) количество выводимых строк на каждой странице, # 2) название таблицы, которую выводим постранично, # 3) дополнительные параметры выбора запроса, например: where поле_какоето1=чемуто # and поле_какоето2=томуто. # не забудьте, что данные дополнительные параметры должны быть и в самом запросе, иначе # вы получите неверные значения.  function numberpage($len,$tablename,$dopquerysql) { global $page;             global $nump; # формируем массив для возврата значений из функции             $nump=array("page"=>"","numers"=>"","len"=>"0","all"=>"0","top1"=>"0","top2"=>"0");                # получаем URL страницы, с которой вызвали функцию $namepage=@$PATH_INFO; # вычисляем количество строк в запросе             $nu=@mssql_query("select count(1) as ss from $tablename $dopquerysql");                       $nrow=@mssql_fetch_array($nu);                                           $all=$nrow['ss'];                         @$pages=ceil($all/$len)-1;             if (@$page==(@$pages+1)) { $top1=$all-(($page-1)*$len); $top2=$all;                                                            } else { $top1=$len; $top2=$page*$len; }             if (@$len>=$all) { $top1=$all; $top2=$all; }             $numers=($page-1)*$len; @$q=$all/$len; # готовим массив с номерами страниц if ($q>1) {                for ($p=0; $p<=$pages; $p++) {                          $pag=$p+1; @$nump[page]="$nump[page][<a href = '$namepage?page=$pag".$dopnum."'>$pag</a>] ";    } } # подготавливаем массив с конечными результатами и выводим его $nump["page"]=@$nump[page]; $nump["numers"]=$numers; $nump["len"]=$len; $nump["all"]=$all; $nump["top1"]=$top1; $nump["top2"]=$top2;  return $nump; } ?>

Данную функцию можно расположить в файле с вашими конфигурациями всего вашего проекта и вызывать ее на каждой страницы, где вы собираетесь делать постраничный вывод. Например: файл конфигурации у вас называется myconfig.php, значит, на каждой странице вставляем <? require(“myconfig.php”); ?>

Теперь переходим непосредственно к выводу нашей таблицы в браузере. Сразу определяемся, сколько у нас будет выводится на экран строк таблицы, или делаем форму для выбора количества строк пользователем. Форму я тут приводить не буду, так как это выходит за рамки статьи и достаточно легко, чтоб на этом останавливаться.

Перед выводом таблицы вызываем функцию (будем выводить по 10 строк на странице из таблицы наша_таблица где поле2 содержит слово КАКОЕТОЗНАЧЕНИЕ и поле5 равно 12):

<? numberpage("10","наша_таблица","where поле2 like ‘%КАКОЕТОЗНАЧЕНИЕ%’ and поле5=12"); ?>

Помните, что если у вас нет никаких дополнительных параметров выбора, просто оставьте значение пустым, и вы получите выбор из всех полей таблицы. Например: <? numberpage(«10″,»наша_таблица»,»"); ?>, соответственно убрав данное условие и при выводе самой таблицы.

Затем, в нужном нам месте выводим саму таблицу:

<? $grn=@mssql_query("select * from (select  top $nump[top1]  * from (select top $nump[top2] * from наша_таблица where поле2 like ‘%КАКОЕТОЗНАЧЕНИЕ%’ and поле5=12 order by таблица_ID desc) as t1 order by таблица_ID ) as t2 order by таблица_ID desc",$link); for($gd=0; $gd<@mssql_num_rows($grn); $gd++) {    $gr=@mssql_fetch_array($grn); ?>

Затем выводим перечисление страниц: <? echo «<p>».@$nump[page].»</p>»; ?>

В данном примере, у вас будут выводится записи в обратной последовательности, начиная с последней в таблице по 10 к первой. Если вам надо, чтобы записи выводились с первой и далее, то скрипт надо модифицировать:

select * from (select  top $nump[top1]  * from (select top $nump[top2] * from наша_таблица order by таблица_ID) as t1 order by таблица_ID desc ) as t2 order by таблица_ID

Вот в принципе и все.

Источник: internet-technologies.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи