Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Постраничный вывод в Access. / 25 сообщений из 43, страница 1 из 2
20.05.2004, 17:45
    #32526832
goodw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Доброго времени суток!


Задача такая: выбрать из БД записи с 100-й по 120-ю.

SELECT TOP 20 * FROM [ table ] WHERE Id_records NOT IN (SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records) ORDER BY ID_records.

НО, из-за отсутствия внутренней оптимизации запросов в Access'e - тормозит (если в таблице 5000 записей, думает около минуты).
Если убрать TOP во вложенном запросе - работает быстро.

Вопрос: Как пропустить n-е число записей в Access, чтобы это работало быстро.

Заранее спасибо.
...
Рейтинг: 0 / 0
20.05.2004, 17:47
    #32526835
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
У меня глупый вопрос: а это поле проиндексировано?
...
Рейтинг: 0 / 0
20.05.2004, 17:47
    #32526839
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
(Кстати, это будут записи не с 100-й, а со 101-й...)
...
Рейтинг: 0 / 0
20.05.2004, 17:48
    #32526840
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
такой задачи
авторЗадача такая: выбрать из БД записи с 100-й по 120-ю.

БЫТЬ НЕ МОЖЕТ

МОЖЕТ БЫТЬ Такая задача:
Выбрать из БД записи, у которых значение поля ID находится внутри отрезка
100-120
...
Рейтинг: 0 / 0
20.05.2004, 17:50
    #32526845
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
И решается она так -

Код: plaintext
1.
2.
Select * 
From [table]
Where Id_Records BETWEEN  100  AND  120 
...
Рейтинг: 0 / 0
20.05.2004, 17:51
    #32526848
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 Victosha:

Хоть такой задачи быть и не может, но приведенный в вопросе селект работает!
...
Рейтинг: 0 / 0
20.05.2004, 17:52
    #32526849
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 Виктоша

Такая задача не только может быть, но и реально используется
Для примера этот сайт :)

и по ссылке тебя
http://www.sql.ru/faq/faq_topic.aspx?fid=105
...
Рейтинг: 0 / 0
20.05.2004, 17:54
    #32526854
goodw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Спасибо.

Да, вы правы. Выводить записи нужно со 101-й. Но это не существенно.
Поле проиндексировано.

Такая задача нужна для реализации пейджингового механизма. С возможностью сортировки данных по произвольному полю.

В этой связи хочу отметить: мне нужно выводить данные именно со 101-й записи по счету, а не со 102-м ID.
...
Рейтинг: 0 / 0
20.05.2004, 17:56
    #32526861
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 Саныч

Саныч - это ,была просто шутка? Или мне нужно ответить по существу?
...
Рейтинг: 0 / 0
20.05.2004, 17:56
    #32526862
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
По ссылке paparome приведен вариант с временной таблицей... Похоже, что ничего более красивого нет.
...
Рейтинг: 0 / 0
20.05.2004, 17:57
    #32526864
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 Victosha:

Если у тебя шутка, то и у меня шутка. Else соответственно.
...
Рейтинг: 0 / 0
20.05.2004, 17:59
    #32526869
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Тормозит NOT IN - он вообще тормозной

как вариант (все равно идет сортировка)

1. Вычисляешь максимальный из первых 100
2. в условии вместо "NOT IN" пишешь "> п.1"

Осталась маленькая проблема, как это реализовать :(
...
Рейтинг: 0 / 0
20.05.2004, 18:02
    #32526883
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Да, точно. Как-то так:

SELECT TOP 20 * FROM [ table ] WHERE Id_records > select max(SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records)
...
Рейтинг: 0 / 0
20.05.2004, 18:02
    #32526885
goodw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Господа!

Приведенный мною запрос хорошо работает в MS SQL, но очень тормозит в Access'e.

Собственно предложенное вами решение (http://www.sql.ru/faq/faq_topic.aspx?fid=105) полностью аналогично моему.

Решения с использованием временных таблиц мне не подходят - Access же все таки.
...
Рейтинг: 0 / 0
20.05.2004, 18:03
    #32526887
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
О еще идейка - но надо проверять

Что если конструкцию NOT IN заменить на left join, а во where проверять на Null

Что-то типа:
Код: plaintext
1.
2.
3.
4.
select top  20  *
from tbl x1 left join
(select top  100  id from tbl) x2
on x1.id = x2.id
where x2.id is null

1. А вдруг быстрее будет?
2. в MSSQL такое прокатит, а вот прокатит ли в Аксе?
...
Рейтинг: 0 / 0
20.05.2004, 18:05
    #32526893
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 goodw

Это мы заметили, ссылку для Вика бросил :)
...
Рейтинг: 0 / 0
20.05.2004, 18:05
    #32526895
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Стоп! Этот селект ведь строится динамически? Числа 20 и 100 ведь в него подставляются? Тогда можно запускать два селекта:

SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records

-> получили A=max ->

SELECT TOP 20 * FROM [ table ] WHERE Id_records > A

где выделенное красным вычисляется и подставляется.
...
Рейтинг: 0 / 0
20.05.2004, 18:06
    #32526899
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Саныч рулит :)
...
Рейтинг: 0 / 0
20.05.2004, 18:06
    #32526900
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 paparome
про ссылку на меня не понял,
а по ссылке, в разделе "классика" Glory меня сильно удивил.
придется проверить кое-где.
...
Рейтинг: 0 / 0
20.05.2004, 18:09
    #32526906
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
авторпро ссылку на меня не понял,
Забей

авторв разделе "классика" Glory меня сильно удивил.
придется проверить кое-где.
Что для Glory "классика", того мы можем и не знать

Сразу поправлюсь: того я могу и не знать :)
...
Рейтинг: 0 / 0
20.05.2004, 18:20
    #32526936
goodw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 Саныч:
энергоемкий способ.
"SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records

-> получили A=max ->"
Перебирать весь рекордсет - не пойдет.
...
Рейтинг: 0 / 0
20.05.2004, 18:27
    #32526955
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 paparome
про ссылку понял - послали - оценил -)

2 All
надо же и так серьёзно все это обсуждается....

2 Саныч
у меня не шутка. в общем ввели меня в замешательство.

По энтузиазму обсуждения, поморщив репу, пришел для себя к такому выводу:
Раз люди находят для себя этом какую-то ценность - ну и хорошо.
Главное, чтобы было хорошо.
...
Рейтинг: 0 / 0
20.05.2004, 18:39
    #32526978
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 goodw:

Этот способ всяко не более энергоемкий, чем исходный. Потому что селект с TOP 100 запускается один раз, а не сравнивается поэлементно с внешним селектом, как в исходном случае.

А перебирать весь рекордсет не нужно. Он ведь рассортирован. MoveLast - и готово.
...
Рейтинг: 0 / 0
20.05.2004, 18:49
    #32527000
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
2 Victosha:

А чем этот вопрос хуже других? На этом форуме постоянно просят помочь написать запрос, переделать запрос, оптимизировать запрос...
...
Рейтинг: 0 / 0
20.05.2004, 18:50
    #32527003
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постраничный вывод в Access.
Glory прав в классике - дошло до меня - что-то я последние дни совсем плох.

2 Саныч
(Задрав портки бегом присоединяюсь - уж больно веселый пэйджинг получается - как не поучаствовать....)
А moveLAst и не нужен вовсе, нужно просто ORDER BY трам-пам DESC сказать
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Постраничный вывод в Access. / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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