Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Постраничный вывод из MS SQL на PHP

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
ZooY



Зарегистрирован: 15.01.2002
Сообщения: 210
Откуда: Россия, Москва

СообщениеДобавлено: Ср Окт 13 2004 22:09    Заголовок сообщения: Постраничный вывод из MS SQL на PHP Ответить с цитатой

Подскажите как сделать постраничный вывод из MS SQL на PHP.
К SQL конектюсь через стандартную библиотеку (php_mssql)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Окт 14 2004 08:28    Заголовок сообщения: Ответить с цитатой

А в чем проблема? В мсскуле тоже LIMIT есть, как и в любой другой нормальной реляционной базе Smile
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alexandr 172



Зарегистрирован: 03.09.2004
Сообщения: 66
Откуда: Челябинск

СообщениеДобавлено: Чт Окт 14 2004 09:42    Заголовок сообщения: Ответить с цитатой

Кстати в MSSQL, по-моему, нет limit, есть top, но он менее функционален, позволяет выбрать только первые n-строк результата.
Лично, я, когда делал, постраничный вывод, с MSSQL, сохранял некоторые данные, на стороне сервера (о стурктуре и составе страниц). Может есть и другой вариант
_________________
www.pay-ace.com/Ras254 - всем в подарок $150
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZooY



Зарегистрирован: 15.01.2002
Сообщения: 210
Откуда: Россия, Москва

СообщениеДобавлено: Чт Окт 14 2004 10:28    Заголовок сообщения: Ответить с цитатой

Ага, LIMIT нету, поэтому и мучаюсь Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Чт Окт 14 2004 13:11    Заголовок сообщения: Ответить с цитатой

Да, я был неправ, прошу прощенияSmile

Может такой вариант:
Код:
$query = 'SELECT TOP '.$onPage.' * FROM Table WHERE OrderField > ALL(SELECT TOP '.($pageNumber * $onPage).' OrderField FROM Table ORDER BY OrderField) ORDER BY OrderField';

Естесственно, если DESC, то надо поменять > на <.

Да, а есть ли в мсскуле ALL? Smile
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Alexandr 172



Зарегистрирован: 03.09.2004
Сообщения: 66
Откуда: Челябинск

СообщениеДобавлено: Чт Окт 14 2004 14:33    Заголовок сообщения: Ответить с цитатой

Не, все таки лучше по-другому. Но с использованием, например, сессий.
При первом запросе выборки документов (или еще чего-нибудь),
разбиваем все документы на страницы, и в сессии сохраняем какие документы какой страницы принадлежат (например, сохраняем их id).
А при запросе определенной страницы достаем из сессии id соответсвующих документов и делаем выборку из базы уже только этих документов.
_________________
www.pay-ace.com/Ras254 - всем в подарок $150
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZooY



Зарегистрирован: 15.01.2002
Сообщения: 210
Откуда: Россия, Москва

СообщениеДобавлено: Пт Окт 15 2004 09:55    Заголовок сообщения: Ответить с цитатой

2 Alexandr 172
Хранение данных в сессии опадает, реч идет о постраничном выводе каталога товаров, ооооочень большого каталога.

2 Scaramouch
А что должно содержать поле OrderField?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZooY



Зарегистрирован: 15.01.2002
Сообщения: 210
Откуда: Россия, Москва

СообщениеДобавлено: Пт Окт 15 2004 09:55    Заголовок сообщения: Ответить с цитатой

2 Scaramouch
Я кажись понял
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ZooY



Зарегистрирован: 15.01.2002
Сообщения: 210
Откуда: Россия, Москва

СообщениеДобавлено: Пт Окт 15 2004 09:57    Заголовок сообщения: Ответить с цитатой

А нельзя сделать также как на ASP, через рекордсеты и курсоры?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Пт Окт 15 2004 11:05    Заголовок сообщения: Ответить с цитатой

Ну OrderField - это то поле, по которому идет сортировка, ведь иначе нет смысла говорить о постраничном выводе.

В сессии можно хранить. даже если у тебя 100000 товаров, что мешает тебе хранить массив в 100000 элементов Smile
На самом деле даже меньше, тебе ведь надо только запомнить начальное(или конечное) значение OrderField для каждой страницы.Smile

А как бы ты это сделал на ASP? Я просто в нем не силен, но если алгоритм опишешь, может, что и посоветовал бы Smile
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
ZooY



Зарегистрирован: 15.01.2002
Сообщения: 210
Откуда: Россия, Москва

СообщениеДобавлено: Пт Окт 15 2004 11:22    Заголовок сообщения: Ответить с цитатой

Ну например вот вывод новостей постранично. Правда БД не MS SQL, а Access, но я думаю это не принципиально

Код:

rsPageSize = 20
If Request("Page") <> "" Then sPage = Request("Page") Else sPage = 1

Dim objConnection
Dim objRecordset
Set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db.mdb") & ";"
Set objRecordset = Server.CreateObject("ADODB.Recordset")
objRecordset.Open "SELECT * FROM News ORDER BY Äàòà DESC", objConnection, 3, 3
' или вместо последниз 3,3 можно указать так
'objRecordset.CursorLocation = 3
'objRecordset.CursorType = 3
objRecordset.PageSize = rsPageSize
objRecordset.AbsolutePage = sPage
Dim i
i = 0
Do While (Not objRecordset.EOF) AND (i<objRecordset.PageSize)
   Response.Write "<B>"
   If Day(objRecordset("Äàòà"))<10 Then Response.Write "0"
    Response.Write Day(objRecordset("Äàòà")) & "."
   If Month(objRecordset("Äàòà"))<10 Then Response.Write "0"
    Response.Write Month(objRecordset("Äàòà")) & "." & Year(objRecordset("Äàòà"))
   Response.Write "</B><P>"
    Response.write objRecordset("Ïîëí_èíô")
   Response.Write "</P><BR>"
   i=i+1
   objRecordset.MoveNext
Loop
'<!-- Navigation -->
Response.Write "<BR><CENTER>"
If sPage > 1 then Response.Write "<A href='news.asp?page=" & sPage-1 & "'><<</A>"
If ((sPage+1)*rsPageSize - objRecordset.RecordCount) < rsPageSize then Response.Write "<A href='news.asp?page=" & sPage+1 & "'>>></A>"

objRecordset.Close
objConnection.Close
Set objRecordset = Nothing
Set objConnection = Nothing
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Scaramouch



Зарегистрирован: 11.01.2004
Сообщения: 143
Откуда: Столица нашей Родины

СообщениеДобавлено: Пт Окт 15 2004 14:08    Заголовок сообщения: Ответить с цитатой

Ну ясно.
Но как мс реализовал класс рекордсет никто не знает.
Так что как работают эти самые свойства pagesize и absolutepage я понятия не имею.
Может они вообще всю таблицу из базы берут Smile
_________________
Ноги - это две лишние руки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...