Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например... / 25 сообщений из 29, страница 1 из 2
01.10.2003, 12:35
    #32280566
-Timka-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Код: 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
02.10.2003, 06:31
    #32281363
Ermak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
A зачем выбирать записи с 3-й по 5-ую???
Для чего???
...
Рейтинг: 0 / 0
02.10.2003, 06:31
    #32281364
Ermak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
A зачем выбирать записи с 3-й по 5-ую???
Для чего???
...
Рейтинг: 0 / 0
02.10.2003, 08:36
    #32281399
-Timka-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
постраничный вывод на web, например.
и еще есть компоненты nativedb.
Так вот при открытии ОЧЧень больших таблиц, он не качает весь результат запроса на клиент, а только порциями, т.е. когда ползунок грида двигаешь, тогда видно, что данные тебе закачиваются...
...
Рейтинг: 0 / 0
02.10.2003, 20:53
    #32282606
roleks
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
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
03.10.2003, 08:27
    #32282736
-Timka-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Спасибо, а если все-таки ASA 8 :(
...
Рейтинг: 0 / 0
06.10.2003, 08:43
    #32284483
Alex Romanovsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
почемубы не исспользовать курсоры
...
Рейтинг: 0 / 0
07.10.2003, 06:16
    #32285703
Ermak
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Для Weba записи с 3-й по 5-ю должен выбирать все равно клиент получающий данные от сервера и формирующий страницу отображаемую броузером.
...
Рейтинг: 0 / 0
08.10.2003, 01:30
    #32286965
Alex Romanovsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
ну выбрать три записи из 10 - это просто, а 3 из миллиона?
...
Рейтинг: 0 / 0
08.10.2003, 03:19
    #32286974
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
-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
11.06.2004, 17:55
    #32558758
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
на ASE 11.9.2
select top 10 from table_name
не работает %_((..
...
Рейтинг: 0 / 0
11.06.2004, 18:07
    #32558786
Mladov Alexey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Можно так:

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

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

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

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

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

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

-Вы что ещё до выполнения запроса знаете, что вам на 100% понадобятся строки 3 - 10?
-На основании каких признаков, вы из всего результата выделяете именно их?
-Почему эти признаки, грубо говоря, нельзя описать в выражении Where оператора Select ?
-Почему нельзя в клиентском приложении из ResultSet'a выбрать нужные вам записи?
-Какие по вашему мнению задачи должны выполнятся сервером, а какие клиентом?
-Какова архитектура вашего приложения?
...
Рейтинг: 0 / 0
16.06.2004, 08:23
    #32562783
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
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
16.06.2004, 08:25
    #32562785
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
прошу прощения, с неграми ошибся адресом %-)))...
...
Рейтинг: 0 / 0
16.06.2004, 08:28
    #32562787
135
135
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Да и ещё.
ErmakПриходите - научу.
А разве дистанционно нельзя? Вы бить меня собираетесь чтоли? %-)))..
для чего обязательно приходить? ;-)))... давайте попробуем через форум всё-таки %-)))..
...
Рейтинг: 0 / 0
16.06.2004, 09:19
    #32562843
Рыжий Кот
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ну вот и я снова... Выбрать записи с 3-ей по 5-ую, например...
Ermak,
если нет какой-то функциональности в сервере, ее надо добавить (в АСА 9 ведь добавили), а постоянно заявлять что данная операция есть следствие напонимания чего-то - по сути та же самая ошибка с вашей стороны.
Вывод результат порциями - самая распространенная операция в вебе.
Например, MySQL давно имеет для этого необходимые команды

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

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

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

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

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

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

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

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

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

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

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


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