|
|
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Задача такая: выбрать из БД записи с 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, чтобы это работало быстро. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:45 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
У меня глупый вопрос: а это поле проиндексировано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:47 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
(Кстати, это будут записи не с 100-й, а со 101-й...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:47 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
такой задачи авторЗадача такая: выбрать из БД записи с 100-й по 120-ю. БЫТЬ НЕ МОЖЕТ МОЖЕТ БЫТЬ Такая задача: Выбрать из БД записи, у которых значение поля ID находится внутри отрезка 100-120 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:48 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
И решается она так - Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:50 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 Victosha: Хоть такой задачи быть и не может, но приведенный в вопросе селект работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:51 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 Виктоша Такая задача не только может быть, но и реально используется Для примера этот сайт :) и по ссылке тебя http://www.sql.ru/faq/faq_topic.aspx?fid=105 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:52 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Спасибо. Да, вы правы. Выводить записи нужно со 101-й. Но это не существенно. Поле проиндексировано. Такая задача нужна для реализации пейджингового механизма. С возможностью сортировки данных по произвольному полю. В этой связи хочу отметить: мне нужно выводить данные именно со 101-й записи по счету, а не со 102-м ID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:54 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 Саныч Саныч - это ,была просто шутка? Или мне нужно ответить по существу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:56 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
По ссылке paparome приведен вариант с временной таблицей... Похоже, что ничего более красивого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:56 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 Victosha: Если у тебя шутка, то и у меня шутка. Else соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:57 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Тормозит NOT IN - он вообще тормозной как вариант (все равно идет сортировка) 1. Вычисляешь максимальный из первых 100 2. в условии вместо "NOT IN" пишешь "> п.1" Осталась маленькая проблема, как это реализовать :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 17:59 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Да, точно. Как-то так: SELECT TOP 20 * FROM [ table ] WHERE Id_records > select max(SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:02 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Господа! Приведенный мною запрос хорошо работает в MS SQL, но очень тормозит в Access'e. Собственно предложенное вами решение (http://www.sql.ru/faq/faq_topic.aspx?fid=105) полностью аналогично моему. Решения с использованием временных таблиц мне не подходят - Access же все таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:02 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
О еще идейка - но надо проверять Что если конструкцию NOT IN заменить на left join, а во where проверять на Null Что-то типа: Код: plaintext 1. 2. 3. 4. 1. А вдруг быстрее будет? 2. в MSSQL такое прокатит, а вот прокатит ли в Аксе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:03 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 goodw Это мы заметили, ссылку для Вика бросил :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:05 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Стоп! Этот селект ведь строится динамически? Числа 20 и 100 ведь в него подставляются? Тогда можно запускать два селекта: SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records -> получили A=max -> SELECT TOP 20 * FROM [ table ] WHERE Id_records > A где выделенное красным вычисляется и подставляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:05 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Саныч рулит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:06 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 paparome про ссылку на меня не понял, а по ссылке, в разделе "классика" Glory меня сильно удивил. придется проверить кое-где. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:06 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
авторпро ссылку на меня не понял, Забей авторв разделе "классика" Glory меня сильно удивил. придется проверить кое-где. Что для Glory "классика", того мы можем и не знать Сразу поправлюсь: того я могу и не знать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:09 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 Саныч: энергоемкий способ. "SELECT TOP 100 Id_Records FROM [ table ] ORDER BY ID_records -> получили A=max ->" Перебирать весь рекордсет - не пойдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:20 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 paparome про ссылку понял - послали - оценил -) 2 All надо же и так серьёзно все это обсуждается.... 2 Саныч у меня не шутка. в общем ввели меня в замешательство. По энтузиазму обсуждения, поморщив репу, пришел для себя к такому выводу: Раз люди находят для себя этом какую-то ценность - ну и хорошо. Главное, чтобы было хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:27 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 goodw: Этот способ всяко не более энергоемкий, чем исходный. Потому что селект с TOP 100 запускается один раз, а не сравнивается поэлементно с внешним селектом, как в исходном случае. А перебирать весь рекордсет не нужно. Он ведь рассортирован. MoveLast - и готово. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:39 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
2 Victosha: А чем этот вопрос хуже других? На этом форуме постоянно просят помочь написать запрос, переделать запрос, оптимизировать запрос... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:49 |
|
||
|
Постраничный вывод в Access.
|
|||
|---|---|---|---|
|
#18+
Glory прав в классике - дошло до меня - что-то я последние дни совсем плох. 2 Саныч (Задрав портки бегом присоединяюсь - уж больно веселый пэйджинг получается - как не поучаствовать....) А moveLAst и не нужен вовсе, нужно просто ORDER BY трам-пам DESC сказать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2004, 18:50 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32526978&tid=1674443]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
162ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 477ms |

| 0 / 0 |
