Добрый день
кто нибудь делал, разбиение курсора (результата запроса к bd) на страницы, ну как в поисковиках.
Хотелось бы узнать "самый элегантный" способ.
Здравствуйте, joker6413, Вы писали:
J>Добрый день J>кто нибудь делал, разбиение курсора (результата запроса к bd) на страницы, ну как в поисковиках. J>Хотелось бы узнать "самый элегантный" способ.
J>Игорь
Вариант. Хранимая процедура, возвращающая из БД необходимое кол-во записей м принимающая номер страницы как параметр.
Ага, а теперь представь что БД возвращает в ASP 10000 записей, а из них тебе нужно 30 ... фигня батенька. Это далеко не элегантный способ! Смотри первый ответ на исходный вопрос.
Никто и не говорил, что это элегантный способ. Можно так, можно так. Оба способа не элегантны в случае очень большого количества возвращаемых записей, увы.
А лучше всего проектировать систему так, чтоб на пользователя не обрушивалось 10000 записей для просмотра.
Здравствуйте, bralgin, Вы писали: B>Никто и не говорил, что это элегантный способ. Можно так, можно так. Оба способа не элегантны в случае очень большого количества возвращаемых записей, увы.
Это почему? B>А лучше всего проектировать систему так, чтоб на пользователя не обрушивалось 10000 записей для просмотра.
а это как раз наша с тобой работа
Здравствуйте, Vladosha, Вы писали:
V>Это почему?
Дано:
1. запрос возвращающий 10000 строк
2. на странице должны отображаться 50 строк за раз
3. требуется отобразить строки с 300 по 350
Напишите для MS SQL Server хранимую процедуру, которая это осуществляет.
Извините, что отвечаю вопросом на вопрос.
Кстати эта тема несколько раз обсуждалась в форуме, и решения даже были. Но элегантных я не видел
Здравствуйте, 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]
.... V>Что могу сказать — зашибись, ё-мое! V>2moderator: пора открывать подраздел — веб-программирование->SQL программирование
.....
А где она — элегантность? И при чем "ё-твое"?
Здравствуйте, bralgin, Вы писали: V>>Что могу сказать — зашибись, ё-мое! V>>2moderator: пора открывать подраздел — веб-программирование->SQL программирование B>..... B>А где она — элегантность? И при чем "ё-твое"?
А ты хочешь одной строкой кода все решить? IMHO лучше — не получится.
А ё-мое, это потому, что обсуждается вопрос, который не стоит выеденного яйца и решается в течении 20 минут при условии наличия опыта программирования SQL. Не знаю, чего еще обсуждать. Предлагаю закрыть этот вопрос по причине его решения...
PS: кому все ещё хочется элегантности — лучше пригласите элегантную девушку в ресторан
V>А ё-мое, это потому, что обсуждается вопрос, который не стоит выеденного яйца и решается в течении 20 минут при условии наличия опыта программирования SQL. Не знаю, чего еще обсуждать. Предлагаю закрыть этот вопрос по причине его решения...
Пальцы — это круто...
Для MySQL такое решение можешь нарисовать также элегантно?
V>кому все ещё хочется элегантности — лучше пригласите элегантную девушку в ресторан
Это уж мы как-нибудь без советчиков
Не послушать ли мне... Отец Василий — Время пиджаков [год спустя]... точно!