Среда, 17.06.2026, 10:14
Приветствую Вас Гость | RSS
Поиск по каталогу
Главная страница | Каталог статей | Регистрация | Вход

Информационные технологии
Форма входа
Меню сайта

Категории каталога
php [246]
perl [1]
perl
ASP [1]
AJAX [0]

Друзья сайта

Наш опрос
Оцените мой сайт
Всего ответов: 69

Начало » Статьи » Web программирование » 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


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

Источник: http://internet-technologies.ru
Категория: php | Добавил: freeone (10.05.2007) | Автор: Юрий Ишкин
Просмотров: 978 | Рейтинг: 0.0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright Информационные технологии © 2006