Разбиение курсора на страницы
От: joker6413  
Дата: 17.02.03 07:02
Оценка:
Добрый день
кто нибудь делал, разбиение курсора (результата запроса к bd) на страницы, ну как в поисковиках.
Хотелось бы узнать "самый элегантный" способ.

Игорь
Re: Разбиение курсора на страницы
От: DOOM Россия  
Дата: 17.02.03 07:07
Оценка:
Здравствуйте, joker6413, Вы писали:

J>Добрый день

J>кто нибудь делал, разбиение курсора (результата запроса к bd) на страницы, ну как в поисковиках.
J>Хотелось бы узнать "самый элегантный" способ.

J>Игорь


Вариант. Хранимая процедура, возвращающая из БД необходимое кол-во записей м принимающая номер страницы как параметр.
Re: Разбиение курсора на страницы
От: bralgin США www.dwh-club.com
Дата: 17.02.03 07:33
Оценка:
Здравствуйте, joker6413, Вы писали:

С помощью свойств рекордсета PageCount, AbsolutePage, PageSize
Приблизительно так (Vшыгфд Basic):

<%
if Request("page") = "" then   'нужная страница передается в адресной строке
    iPage = 1
else
    iPage = Cint( Request("page"))
end if
....
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT .....", .....

rs.PageSize = 30   ' строк на странице
rs.AbsolutePage = iPage   ' выводимая страница
iPageCount = rs.PageCount  
....
%>
.....

<A HREF='pages.asp?&page=1'><<</A>&nbsp;&nbsp;&nbsp;&nbsp;
<A HREF=''pages.asp?&page=<%=iif(iPage=1, iPage, iPage-1)%>'><</A>&nbsp;&nbsp;&nbsp;&nbsp;
<A HREF=''pages.asp?&page=<%=iif(iPage=iPageCount, iPage, iPage+1)%>'>></A>&nbsp;&nbsp;&nbsp;&nbsp;
<A HREF=''pages.asp?&page=<%=iPageCount%>'>>></A>&nbsp;&nbsp;&nbsp; <%=iPage%> из <%=iPageCount%>
http://www.flickr.com/photos/bralgin/
Re[2]: Разбиение курсора на страницы
От: Vladosha Россия  
Дата: 17.02.03 08:09
Оценка:
Здравствуйте, bralgin, Вы писали:

B>С помощью свойств рекордсета PageCount, AbsolutePage, PageSize

B>
B>rs.PageSize = 30   ' строк на странице
B>rs.AbsolutePage = iPage   ' выводимая страница
B>iPageCount = rs.PageCount  
B>

Ага, а теперь представь что БД возвращает в ASP 10000 записей, а из них тебе нужно 30 ... фигня батенька. Это далеко не элегантный способ! Смотри первый ответ на исходный вопрос.
С уважением, Vladosha.
Re[3]: Разбиение курсора на страницы
От: bralgin США www.dwh-club.com
Дата: 17.02.03 11:39
Оценка:
Здравствуйте, Vladosha, Вы писали:

V>.....


Никто и не говорил, что это элегантный способ. Можно так, можно так. Оба способа не элегантны в случае очень большого количества возвращаемых записей, увы.
А лучше всего проектировать систему так, чтоб на пользователя не обрушивалось 10000 записей для просмотра.
http://www.flickr.com/photos/bralgin/
Re[4]: Разбиение курсора на страницы
От: Vladosha Россия  
Дата: 17.02.03 11:41
Оценка:
Здравствуйте, bralgin, Вы писали:
B>Никто и не говорил, что это элегантный способ. Можно так, можно так. Оба способа не элегантны в случае очень большого количества возвращаемых записей, увы.
Это почему?
B>А лучше всего проектировать систему так, чтоб на пользователя не обрушивалось 10000 записей для просмотра.
а это как раз наша с тобой работа
С уважением, Vladosha.
Re[5]: Разбиение курсора на страницы
От: bralgin США www.dwh-club.com
Дата: 17.02.03 12:02
Оценка:
Здравствуйте, Vladosha, Вы писали:

V>Это почему?

Дано:
1. запрос возвращающий 10000 строк
2. на странице должны отображаться 50 строк за раз
3. требуется отобразить строки с 300 по 350
Напишите для MS SQL Server хранимую процедуру, которая это осуществляет.
Извините, что отвечаю вопросом на вопрос.
Кстати эта тема несколько раз обсуждалась в форуме, и решения даже были. Но элегантных я не видел
http://www.flickr.com/photos/bralgin/
Re[6]: Разбиение курсора на страницы
От: bralgin США www.dwh-club.com
Дата: 17.02.03 12:10
Оценка:
Сам считал что такое решение
Автор: bralgin
Дата: 24.01.03
красиво и элегантно, пока не попробовал на практике.
Пользователи же еще захотят туда и обратно прокручивать данные.
http://www.flickr.com/photos/bralgin/
Re[6]: Разбиение курсора на страницы
От: Vladosha Россия  
Дата: 17.02.03 12:40
Оценка:
Здравствуйте, bralgin, Вы писали:
V>>Это почему?
B>Дано:
B>1. запрос возвращающий 10000 строк
B>2. на странице должны отображаться 50 строк за раз
B>3. требуется отобразить строки с 300 по 350
B>Напишите для MS SQL Server хранимую процедуру, которая это осуществляет.
B>Извините, что отвечаю вопросом на вопрос.
B>Кстати эта тема несколько раз обсуждалась в форуме, и решения даже были. Но элегантных я не видел
Что могу сказать — зашибись, ё-мое!
2moderator: пора открывать подраздел — веб-программирование->SQL программирование

Решение:
CREATE PROCEDURE [dbo].[sp_Page]
    @PageNum int,
    @PerPage int
AS

set nocount on

declare @Res table([ID] [int] IDENTITY (1, 1) NOT NULL, Item [int])
insert into @Res(Item) select [ID] from V_Items

declare @Total int
select @Total=count(*) from @Res
declare @MaxPos int
declare @MinPos int
select @MaxPos=@PageNum*@PerPage
select @MinPos=@MaxPos-@PerPage

--get output results
select Sub.[ID] as Pos, @Total as Total, FullList.* from
(
    (select * from V_Items) as FullList
    inner join (select * from @Res where [ID]>@MinPos and [ID]<=@MaxPos) as Sub
    on Sub.Item=FullList.[ID]
)
order by Sub.[ID]


вопросы есть? Неужели так трудно?
С уважением, Vladosha.
Re[7]: Разбиение курсора на страницы
От: bralgin США www.dwh-club.com
Дата: 17.02.03 14:28
Оценка:
Здравствуйте, Vladosha, Вы писали:

....
V>Что могу сказать — зашибись, ё-мое!
V>2moderator: пора открывать подраздел — веб-программирование->SQL программирование
.....
А где она — элегантность? И при чем "ё-твое"?
http://www.flickr.com/photos/bralgin/
Re[8]: Разбиение курсора на страницы
От: Vladosha Россия  
Дата: 18.02.03 07:07
Оценка:
Здравствуйте, bralgin, Вы писали:
V>>Что могу сказать — зашибись, ё-мое!
V>>2moderator: пора открывать подраздел — веб-программирование->SQL программирование
B>.....
B>А где она — элегантность? И при чем "ё-твое"?
А ты хочешь одной строкой кода все решить? IMHO лучше — не получится.
А ё-мое, это потому, что обсуждается вопрос, который не стоит выеденного яйца и решается в течении 20 минут при условии наличия опыта программирования SQL. Не знаю, чего еще обсуждать. Предлагаю закрыть этот вопрос по причине его решения...

PS: кому все ещё хочется элегантности — лучше пригласите элегантную девушку в ресторан
С уважением, Vladosha.
Re[9]: Разбиение курсора на страницы
От: Aquary Россия https://wmspanel.com/
Дата: 18.02.03 13:26
Оценка:
V>А ё-мое, это потому, что обсуждается вопрос, который не стоит выеденного яйца и решается в течении 20 минут при условии наличия опыта программирования SQL. Не знаю, чего еще обсуждать. Предлагаю закрыть этот вопрос по причине его решения...

Пальцы — это круто...

Для MySQL такое решение можешь нарисовать также элегантно?

V>кому все ещё хочется элегантности — лучше пригласите элегантную девушку в ресторан


Это уж мы как-нибудь без советчиков
Не послушать ли мне... Отец Василий — Время пиджаков [год спустя]... точно!
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.