Просмотр полной версии : Разбитие на страницы
Dmitry P.
23.01.2002, 19:55
Привет!
Я работаю с ASP и MSSQL
Мне надо, чтобы кокда я делаю выборку из базы, на странице можно было вибирать количество записей на странице, ну там 10, 15, 50
Как это сделать?
Простейший способ:
1. Строишь выборку, которая возвращает только первичные ключи . Загружаешь ее целиком.
2. Находишь в списке ключей нужный кусок из N записей и выполняешь запрос, который извлекает эти N записей по явно заданным первичным ключам.
Типа такого:
1. select customerID from customers where city="Moscow"
2. select * from customers where customerID in (103423, 2342, 2343, 6456, 2645, 3554 )
Dmitry P.
23.01.2002, 22:45
Но у меня 7000 строк в базе!
Представь сколько такая база будет грузиться по модему!!!
Каждая строка по 16 полей и запрос я делаю не по 1 параметру, а по 12!!!!!
Что мне нужно сделать в данном случае?
Сформировать отдельный запрос и по этому запрсу формировать ключевые поля?
http://monitor.kippk.kolomna.ru
рользователь: user
пароль: gjkmpjdfntkm (пользователь) - только латинскими как на примере!!!
та же проблемма, а нормального решения так и не нашёл
Как я понял, тебе надо, например тут:
http://monitor.kippk.kolomna.ru/selected/select_cat_id.asp?id={18080A49-3180-41EE-B664-37EC424DB05C}
Выводить по 10,15,20 записей на страницу?
Dmitry P.
24.01.2002, 11:10
Да! Да!
Если не трудно, то ответьте пожалуйста!!!
Или ссылочки по теме дайте!!!
Заранее спасибо!
Оригинал написал(а) Dmitry P.
Что мне нужно сделать в данном случае?
Медитировать над текстом моего предыдущего письма. Там все написано.
предлагаю на выбор два способа разбивать выборку постранично:
1. Используя RecordSet
2. Используя GetRows
Первый удобнее, но сервер грузит..
Второй работает быстрее, но нельзя обратится к полю по имени
2Crazy - ne nujno meditirovat' - eto ne samiy luchshiy sposob.
Da ya mogu dobavit' pervichniy kluchik(etche i sdlat' ego uporyadochenim po odnomu) i zatem igrat'sya s zapsosami tipa:
SELECT TOP intPagesToGet * FROM customers where (customerId BETWEEN lastID AND lastID+intPagesToGet)
no ne vsegda mozhno kluchi dobavlyat'...(db u menya chuzhaya ne mogu ya ee menyat')
Ispol'zuya RecordSet? v smisle .AbsolutePage??? - performance suicide
GetRows i zatem brat' kuski arraya po chastyam? ne proboval... no somnevaus' chto budet bistree...
Оригинал написал(а) evalex
2Crazy - ne nujno meditirovat' - eto ne samiy luchshiy sposob.
Никто и не просил лучший. Но он гарантированно работающий.
SELECT TOP intPagesToGet * FROM customers where (customerId BETWEEN lastID AND lastID+intPagesToGet)
Только в простейших случаях. Даже элементарное условие в where убивает эту идею напрочь.
Оригинал написал(а) evalex
GetRows i zatem brat' kuski arraya po chastyam? ne proboval... no somnevaus' chto budet bistree...
Быстрее и намного, чем .AbsolutePage
Dmitry P, используйте метод Move() и свойство RecordCount.
Это проще всего, хотя и будет тянуть все записи в рекордсет.
Собственно будет работать как и с AbsolutePage, только возни с кодом на мой взгляд меньше.
Написать попробуйте сами, там нет ничего сложного. Если найду у себя готовый пример, то кину. Писать его простите заново, лень.
Для того что бы спихнуть в рекордсет только записи на конкретной странице придется написать хранимую процедуру на SQL сервере с курсором внутри. Будет ли это работать быстрее возможно, но не на много.
Оригинал написал(а) findman
Будет ли это работать быстрее возможно, но не на много.
Это будет быстрее. И намного. Но только при прямых руках. :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.