powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Постраничный вывод в Access.
43 сообщений из 43, показаны все 2 страниц
Постраничный вывод в Access.
    #32526832
goodw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!


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

БЫТЬ НЕ МОЖЕТ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Что если конструкцию 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
Постраничный вывод в Access.
    #32526893
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 goodw

Это мы заметили, ссылку для Вика бросил :)
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32526895
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Стоп! Этот селект ведь строится динамически? Числа 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
Постраничный вывод в Access.
    #32526899
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч рулит :)
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32526900
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 paparome
про ссылку на меня не понял,
а по ссылке, в разделе "классика" Glory меня сильно удивил.
придется проверить кое-где.
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32526906
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпро ссылку на меня не понял,
Забей

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

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

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

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

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

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

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

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

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

2 Саныч
(Задрав портки бегом присоединяюсь - уж больно веселый пэйджинг получается - как не поучаствовать....)
А moveLAst и не нужен вовсе, нужно просто ORDER BY трам-пам DESC сказать
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527008
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
ворос - ХОРОШ
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527010
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victosha, если сделать DESC, то TOP вернет не те записи. По-моему, ты прикалываешься над вопросом, не прочитав его.
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527013
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
про "прикалываешся" - не подумал. видно выспаться мне надо.
(просто увидел ORDER BY)
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527018
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда так
SELECT MAX(t.Id_Records) FROM
( SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records ) as t
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527023
фыыф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для 97.
1. qt - сохраненный запрос
Код: plaintext
1.
2.
3.
SELECT MAX(q.id) as id
  FROM [SELECT TOP  100  T.id
              FROM atable AS T
              ORDER BY id]. as q;
/можно без [ ]., но тогда в 97 нужно вложенный оформит как отдельный
то же потребуется в 97 в случае необходимости передать параметр (или ввести символы [] для иных целей внутрь [ ]./

Код: plaintext
1.
2.
3.
4.
SELECT TOP  20  t.*
  FROM atable AS t
   INNER JOIN qt
    ON t.id > qt.id
;

это, я так понимаю, аналог OFFSET ?
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527161
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Расскажу притчу. Когда я учился в школе, у нас была олимпиада по программированию. И там была задача: рассортировать массив, в котором сидят только значения 1, 2 и 3. Я написал программу, которая честно сортирует массив, как меня учили. Это было неправильное решение. Правильно было пройти по массиву один раз, сосчитать все 1, 2 и 3, а потом вторым проходом затереть все значения не глядя и просто занести 1, 2 и 3 в нужном количестве. Это работает гораздо быстрее, потому что обходится без цикла в цикле, который нужен для обычной сортировки.

Это была присказка. А сказка такова: гениальное решение paparome от 17:59 - это правильное решение. Не нужно городить временную таблицу, когда нужно всего лишь одно максимальное значение ключа.
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527321
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно спросить, на всякий случай, ADO или DAO?
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527500
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
живут же люди - их в школе программированию учили.
видать, физ-мат класс...

-)
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527785
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Физматшкола № 239 г.Ленинграда.
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32527904
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
179 г. Москва
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32528798
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
179 - чемпион
Victosha а какой год выпуска я 1980 10"Г"
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32528853
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1977 10Г
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32528862
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общие учителя
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32528874
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
частично наверняка
Бронфман у вас еще работал или уже нет?
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32528881
Фотография Shuhard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Владимирович - да
Он ушел лет через 5 после меня
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32528923
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может, при каком удобном случае, пивка? раз уж колыбель одна.

зы
Shuhard, я себя и тебя поздравляю - нам в жизни ОЧЕНЬ СИЛЬНО повезло. Это ВЫБРАТЬ нельзя, а ДАЕТСЯ не каждому - просто так, без заслуг.
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32529102
lobodava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут не слишком поздно со своим примерчиком?
Код: plaintext
1.
2.
select top  20  * 
from (select top  120  * from [table] order by Id_records) 
order by Id_records desc
...
Рейтинг: 0 / 0
Постраничный вывод в Access.
    #32529153
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 lobodava
скромненько так, но с хорошим вкусом.
-)))
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Постраничный вывод в Access.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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