powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
25 сообщений из 29, страница 1 из 2
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32280566
-Timka-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
begin
  declare _from int;
  declare _to int;
  set _from =  3 ;
  set _to =  5 ;

  select rownum = number(*), rtc.* into #aaa from rtc;
  select * from #aaa where rownum between _from and _to;

end;



Вроде работает, но может есть способ получше...
Если вдруг таблиЦка окажется большой, то будут ли тормоза?
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32281363
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A зачем выбирать записи с 3-й по 5-ую???
Для чего???
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32281364
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A зачем выбирать записи с 3-й по 5-ую???
Для чего???
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32281399
-Timka-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
постраничный вывод на web, например.
и еще есть компоненты nativedb.
Так вот при открытии ОЧЧень больших таблиц, он не качает весь результат запроса на клиент, а только порциями, т.е. когда ползунок грида двигаешь, тогда видно, что данные тебе закачиваются...
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32282606
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASA 9

SELECT statements can now include START AT as part of the TOP clause START AT provides additional flexibility in queries that explicitly limit the result set.


row-limitation :
FIRST | TOP n [ START AT m ]
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32282736
-Timka-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, а если все-таки ASA 8 :(
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32284483
Alex Romanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
почемубы не исспользовать курсоры
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32285703
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Weba записи с 3-й по 5-ю должен выбирать все равно клиент получающий данные от сервера и формирующий страницу отображаемую броузером.
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32286965
Alex Romanovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну выбрать три записи из 10 - это просто, а 3 из миллиона?
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32286974
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Timka-
Если у Вас в таблице есть primary или unique key, то можно при получениях порций данных отталкиваться от него:
Код: plaintext
1.
2.
3.
4.
5.
select top  10  *
from rtc
where @Last_id is null or 
  id > @Last_id
order by id

Клиент при следующем запросе в @Last_id должен подставить значение ключа последней записи набора данных или NULL для получения первой порции записей. Однако при этом способе могут возникнуть проблемы, если на клиента должны идти отсортированные не по ключу данные. Хотя по идее тогда можно попробовать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
select top  10  
  convert(varchar( 50 ), Field1) + convert(varchar( 50 ), Field2) as virtual_id, *
from rtc
where @Last_id is null or 
  virtual_id > @Last_id
order by Field1, Field2

Принцип тот же, что и в примере выше, только что вместо уникально идентифицирующего запись ключа береться составной ключ из полей, участвующих в сортировке. Они кстати должны быть в сумме уникальны.

Еще как способ - открыть на клиенте соотвествующий серверный курсор и данные гонять через него, но я бы не рекомендовал с ним связываться.

Еще добавлю от себя, что все вышеперечисленные способы не очень то подходят для моментов, когда между считываниями очередных порций данных эти данные были добавлены, изменены и удалены.

P.S.Я бы рекомендовал Вам не рыть в сторону "Как сделать", а подумать над структурой Вашей таблицы rtc - в основном многие проблемы реализации и не хватающей функциональности РСУБД решаются в первую очередь правильной проектировкой БД.
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32558758
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
на ASE 11.9.2
select top 10 from table_name
не работает %_((..
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32558786
Mladov Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно так:

set rowcount 10
select * from <table> where <clause>
set rowcount 0
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32558815
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
мне нужно получить 10 строк запроса начиная с 20той.
в сабейсе насколько я понял это просто невозможно.
честно говоря после посгреса я был в шоке от такого... %-(((...
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32558923
roleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так

select top 5 id,.... from t
where id not in (select top 10 id from t)
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32561132
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
roleksА если так

select top 5 id,.... from t
where id not in (select top 10 id from t)
говорю же, конструкция top в Sybase отсутствует... по крайней мере в 11.9.2
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32561373
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автормне нужно получить 10 строк запроса начиная с 20той.
в сабейсе насколько я понял это просто невозможно.
честно говоря после посгреса я был в шоке от такого... %-(((...

А Вы запрос составте так, что бы из базы получить ровно столько строк, сколько нужно. Или с этим серьезные проблемы?
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562264
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
ErmakА Вы запрос составте так, что бы из базы получить ровно столько строк, сколько нужно. Или с этим серьезные проблемы?
Может научите неуча, как без top без limit сделать такой запрос, чтобы получить только нужное количество строк?
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562271
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написали же set rowcount юзать. И без TOP будет.
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562712
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
135Может научите неуча, как без top без limit сделать такой запрос, чтобы получить только нужное количество строк?

Приходите - научу.

К великому сожалению, вы так внятно и не смогли пока, объяснить зачем вам нужно выбирать с 3й - по 20ю запись из результата запроса. Мой опыт, не даёт поверить вам, что нельзя обойтись без top и limit. Мне ужасно интересно узнать - почему же вам это так необходимо?

-Вы что ещё до выполнения запроса знаете, что вам на 100% понадобятся строки 3 - 10?
-На основании каких признаков, вы из всего результата выделяете именно их?
-Почему эти признаки, грубо говоря, нельзя описать в выражении Where оператора Select ?
-Почему нельзя в клиентском приложении из ResultSet'a выбрать нужные вам записи?
-Какие по вашему мнению задачи должны выполнятся сервером, а какие клиентом?
-Какова архитектура вашего приложения?
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562783
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
ErmakК великому сожалению, вы так внятно и не смогли пока, объяснить зачем вам нужно выбирать с 3й - по 20ю запись из результата запроса. Мой опыт, не даёт поверить вам, что нельзя обойтись без top и limit. Мне ужасно интересно узнать - почему же вам это так необходимо?

Это необходимо для постраничного вывода на веб-станице.
Ermak
-Вы что ещё до выполнения запроса знаете, что вам на 100% понадобятся строки 3 - 10?

Да.
Ermak
-На основании каких признаков, вы из всего результата выделяете именно их?

На основании того признака, что с веб-страницы приходит запрос на отображение следующих n строк.
Ermak
-Почему эти признаки, грубо говоря, нельзя описать в выражении Where оператора Select ?

Потому что нет такого поля, которое бы во всех возможных вариантах сортировки позволило бы выполнить эту задачу через where
Ermak
-Почему нельзя в клиентском приложении из ResultSet'a выбрать нужные вам записи?

Потому что сама идеология Sybase говорит о том, что не надо делать операции ненужного ввода-вывода, что транспорт между клиентом и сервером есть одно из узких мест системы и что надо в процедурах выполнять все необходимые действия, выдавая в результатах только необходимые данные. В принципе я с этим согласен.
Ermak
-Какие по вашему мнению задачи должны выполнятся сервером, а какие клиентом?

В случае с отображением в вебе, сервер предоставляет клиенту результаты запроса. Когда просто вывели весь результат одной таблицей - тут проблем нет, но когда в результате получаем под 10000 строк (минимум) и необходимо отобразить на одной странице по 20 например, то мне нужны каждый раз только определённые 20 и я не хочу перегружать транспорт и клиента остальными не нужными в данный момент 9980 строками.

З.Ы. вы так и не сказали при чём тут негры.
----
Сергей Васкецов - я могу таким образом выбрать только первые n строк, а как мне выбрать n строк начиная со строки n+1?
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562785
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
прошу прощения, с неграми ошибся адресом %-)))...
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562787
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
Да и ещё.
ErmakПриходите - научу.
А разве дистанционно нельзя? Вы бить меня собираетесь чтоли? %-)))..
для чего обязательно приходить? ;-)))... давайте попробуем через форум всё-таки %-)))..
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32562843
Фотография Рыжий Кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ermak,
если нет какой-то функциональности в сервере, ее надо добавить (в АСА 9 ведь добавили), а постоянно заявлять что данная операция есть следствие напонимания чего-то - по сути та же самая ошибка с вашей стороны.
Вывод результат порциями - самая распространенная операция в вебе.
Например, MySQL давно имеет для этого необходимые команды

...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32563170
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВывод результат порциями - самая распространенная операция в вебе.
Возможно, спорить не буду.

Сколько раз будет выполняться запрос на стороне сервера если я например захочу просмотреть все 300-500 страниц, которые могут быть сформированы в результате запроса? Или при этом по сети пройдет меньший трафик? Ни в коем случае.

Не понятно почему нельзя результат запроса кэшировать на клиенте и по мере необходимости выдавать его в интернет.

Даже если это и веб, то задача задаче рознь? Если это что-то Google, Yahoo, Yandex'a - это одна ситуация. Если это внутрикорпоративный сайт - другая.

Для того что бы предметно что-то обсуждать по данному поводу, необходимо знать полные условия задачи, если их нет, то каждый остается при своем мнении.
...
Рейтинг: 0 / 0
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
    #32563241
135
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
135
Гость
ErmakСколько раз будет выполняться запрос на стороне сервера если я например захочу просмотреть все 300-500 страниц, которые могут быть сформированы в результате запроса? Или при этом по сети пройдет меньший трафик? Ни в коем случае.

Выполнится столько раз, сколько будет необходимо. Более того. Каждый раз будет отдано только необходимое количество данных. То есть если надо - то пролистается весь вывод. Если не надо - то только то, что необходимо.
Больший трафик не пройдёт а вот меньший - да. За счёт того, что не всем, далеко не всем нужны все результаты...

Ermak
Не понятно почему нельзя результат запроса кэшировать на клиенте и по мере необходимости выдавать его в интернет.

Потому что речь идёт о транспорте между СУБД и клиентом и о том, что это узкое место в системе... и о том, что по рекомендациям сабейса (и по моим личным убеждениям) нагружать его ненужным трафиком нельзя.

Ermak
Даже если это и веб, то задача задаче рознь? Если это что-то Google, Yahoo, Yandex'a - это одна ситуация. Если это внутрикорпоративный сайт - другая.

Общие моменты они одинаковы везде. Только при ошибке в корпоративном сайте мы можем либо не получить отдачи либо получим но последствия эти будут незначительны по сравнению с теми, которые мы бы отгребли при аналогичном косяке на "врослом" проекте.

Ermak
Для того что бы предметно что-то обсуждать по данному поводу, необходимо знать полные условия задачи, если их нет, то каждый остается при своем мнении.
Дык я вам предметно вроде как и говорю.
Условия - есть таблица 7 колонок. 1 колонка - первичный ключ. Надо выводить данные постранично с возможностью сортировки по всем столбцам.
Если Sybase не поддерживает SQL92 по top & limit, то что делать? Такая классная платная ASE и проигрывает какой-то куцой MySQL...
Мы в своё время ходили в лаптях (читай FOXPRO) ну так это ведь не аргумент?
Мои аргументы - это рекомендации Sybase и SQL92.
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]